算法(2)重构IP地址

LeetCode算法题,重构IP地址


题目

参考DFS-lintcode恢复ip地址(Restore IP Addresses)
分析:
1、ip地址由4部分组成,每部分范围为0-255,其中单个的0是可行的,但是多个0是不可以的(00,01)
2、每部分的位数可能情况有三种(1,11,111),处理的字符串为范围为[start,n-1],所以遍历三种可能,start到达n结束。
3、需要一个step,表示正在处理第几部分,剩下的值的范围就是(4-i)1<= len <=(4-i)3,用于剪枝。

static void solution(String s, ArrayList list, String result, int start, int step) {
        //收敛条件
        if (start == s.length() && step == 4) {
            list.add(result.substring(0,result.length() - 1));
            System.out.println(result.substring(0,result.length() - 1));
            return;
        }

        //剪枝条件
        if (s.length() - start < (4 - step))
            return;
        if (s.length() - start > (4 - step) * 3)
            return;

        int num = 0;
        for (int i = start; i < s.length(); i++) {
            num = num * 10 + (s.charAt(i) - '0');
            if (num <= 255) {
                result = result + (s.charAt(i) - '0');
                solution(s, list, result + ".", i + 1, step + 1);
            }
            //当出现0的时候返回,因为ip第一没部分首位只能出现一个0
            if (num == 0)
                return;
        }
    }

你可能感兴趣的:(算法(2)重构IP地址)