leetcode-93-复制IP地址
/*给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]*/
public static void main(String[] args) {
List<String> dest = new ArrayList<>();
List<String> tmp = new ArrayList<>();
backTrack("0279245587303", 0, tmp, dest);
System.out.println(JSONObject.toJSONString(dest));
}
public static void backTrack(String src, int curPos, List<String> tmp, List<String> dest) {
if (tmp.size() == 4) {
dest.add(tmp.get(0) + "." + tmp.get(1) + "." + tmp.get(2) + "." + tmp.get(3));
return;
}
if (tmp.size() == 3) {
String str = src.substring(curPos);
if (str.length() > 3) { // 这块在编码的时候忽略,导致integer时溢出
return;
}
if (Integer.parseInt(str) <= 255) {
if (str.length() > 1 && str.substring(0, 1).equals("0")) { //第一次写时忽略了该情况,并注意字符串的比较
return;
}
tmp.add(str);
backTrack(src, src.length(), tmp, dest);
tmp.remove(tmp.size() - 1);
}
return;
}
for (int i = 1; i <= 3; i++) {
if (curPos + i >= src.length()) {
return;
}
String str = src.substring(curPos, curPos + i);
if (str.length() > 1 && str.substring(0, 1).equals("0")) {
return;
}
if (Integer.parseInt(str) > 255) {
return;
}
tmp.add(str);
backTrack(src, curPos + i, tmp, dest);
tmp.remove(tmp.size() - 1);
}
}
经典回溯法解题
参考:https://leetcode-cn.com/problems/restore-ip-addresses/submissions/
浙公网安备 33010602011771号