题目链接
法一(回溯法)
public class Solution93 {
private List<String> ans;
private List<String> path;
public Solution93() {
this.ans = new LinkedList<>();
this.path = new ArrayList<>();
}
private boolean isValid(String s) {
if (s.length() > 3 || (s.length() > 1 && s.charAt(0) == '0') || Integer.valueOf(s) > 255) {
return false;
}
return true;
}
private String toIpAddresses() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < path.size(); i++) {
sb.append(path.get(i));
if (i != path.size() - 1) {
sb.append(".");
}
}
return sb.toString();
}
private void backTracking(String s, int start) {
if (path.size() > 4) {
return;
}
if (start == s.length() && path.size() == 4) {
ans.add(toIpAddresses());
return;
}
for (int i = start; i < s.length(); i++) {
String item = s.substring(start, i + 1);
if (!isValid(item)) {
continue;
}
path.add(item);
backTracking(s, i + 1);
path.remove(path.size() - 1);
}
}
public List<String> restoreIpAddresses(String s) {
if (s.length() > 12) {
return ans;
}
backTracking(s, 0);
return ans;
}
}
本地测试
lay.showTitle(93);
Solution93 sol93 = new Solution93();
String s93 = "101023";
List<String> ans93 = sol93.restoreIpAddresses(s93);
System.out.println(ans93.toString());