codeTop100题(36)93. 复原 IP 地址

134 阅读1分钟

1. 题目

93. 复原 IP 地址

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;
}