1. 题目
2. 分析
IP地址的要求:
- 4个整数
- 每个整数都在0-255之间
- 要求不能有前导0
我们可以尝试使用递归的方式,每次取出来一个满足条件的数字,然后递归调用,最后凑够4个数字的时候再判断一下,是否刚好用完所有数字。
递归方法参数及含义:
- s:原始字符串
- start:被选择的数字的后一位
- flag:还能取几个数字
- result:保存结果的list
- builder:临时字符串
3. 代码
public static List<String> restoreIpAddresses(String s) {
List<String> result = new ArrayList<>();
restoreIpAddresses(s, 0, 4, result, "");
return result;
}
public static void restoreIpAddresses(String s, int start, int flag, List<String> result, String builder) {
if (flag == 0) {
if (start == s.length()) {
result.add(builder.substring(0, builder.length() - 1));
}
return;
}
for (int i = start; i < s.length(); i++) {
if (!(restoreIpAddressesCheck(s, start, i))) {
return;
}
restoreIpAddresses(s, i + 1, flag - 1, result, builder + s.substring(start, i+1) + ".");
}
}
public static boolean restoreIpAddressesCheck(String s, int l, int r) {
String temp = s.substring(l, r+1);
if ("0".equals(temp)) {
return true;
}
if (temp.startsWith("0")) {
return false;
}
int integer = Integer.parseInt(temp);
return integer >= 1 && integer <= 255;
}