Q:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。
示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
A:
回溯:
private List<String> res;
public List<String> restoreIpAddresses(String s) {
res = new LinkedList<>();
if (s.length() < 4)
return res;
List<String> list = new LinkedList<>();
back(s, 0, list);
return res;
}
private void back(String s, int start, List<String> list) {
if (list.size() == 4) {
if (start == s.length()) {
res.add(String.join(".", list));//用join更方便
}
return;
}
for (int i = 1; i < 4; i++) {//子串长度
if (start + i > s.length())
break;
String sub = s.substring(start, start + i);
if (sub.length() > 1 && sub.charAt(0) == '0')//避免有“000”,“010”等情况
continue;
int curr = Integer.parseInt(sub);
if (curr <= 255) {
list.add(sub);
back(s, start + i, list);
list.remove(list.size() - 1);
}
}
}