问题描述:给定仅包含数字的字符串,请通过返回所有可能的有效IP地址组合来还原它。 一个有效的IP地址正好由四个整数(每个整数在0到255之间)组成,并用单点分隔。 例:输入: “ 25525511135” 输出: ["255.255.11.135", "255.255.111.35"] 解析:使用回溯法进行题解 代码: class Solution {
List<String> sol;
public List<String> restoreIpAddresses(String s) {
sol = new ArrayList<>();
if (s == null || s.length() == 0) {
return sol;
}
dfs(s, 0, new StringBuilder());
return sol;
}
void dfs(String s, int n, StringBuilder sb) {
if (s.length() > 3 * (4 - n)) {
// e.g. 2.2.25555555 is not possible
return;
}
if (n == 4) {
if (s.length() == 0) {
sol.add(sb.toString());
}
return;
}
for (int i = 1; i <= 3; i++) {
if (s.length() < i) {
break;
}
String segment = s.substring(0, i);
int value = Integer.parseInt(segment);
if (value <= 255 && String.valueOf(value).length() == i) {
// segment in range [0,255] and has no leading zero like 0x, 0xx
StringBuilder tempSb = new StringBuilder(sb);
tempSb.append(segment);
tempSb.append(n == 3 ? "" : ".");
dfs(s.substring(i, s.length()), n+1, tempSb);
}
}
}
}
|