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;
}
}
网友评论