leetcode——93.复原IP地址

public List<String> restoreIpAddresses(String s) {
        int len = s.length();
        List<String> res = new ArrayList<>();
        if(len<4 ||len>12) {
            return res;
        }
        Deque<String> path = new ArrayDeque<>(4);   //这里学习到了
        int splitTimes = 0;//已经分割出来多少个IP段
        dfs(s,len,splitTimes,0,path,res);
        return res;
    }

    private int judgeIfIpSegment(String s ,int left,int right){  //判断子区间是否能成为一个IP段
        int len = right-left+1;
        if(len>1 &&s.charAt(left) =='0'){  //大于1位的时候,不能以0开头
            return -1;
        }
        int res = 0;
        for(int i = left;i<=right;i++){
            res = res*10 + s.charAt(i) -'0';
        }
        if(res>255){
            return -1;
        }
        return res;
    }
    private void dfs(String s, int len, int split, int begin, Deque<String> path, List<String> res) {
        if(begin == len){
            if(split == 4){
                res.add(String.join(".",path));
            }
            return;
        }
        if(len - begin < (4-split)||len - begin > 3*(4-split)){
            return;
        }
        for(int i = 0;i<3;i++){
            if(begin + i >= len){
                break;
            }
            int ipSegment = judgeIfIpSegment(s,begin,begin+i);
            if(ipSegment != -1){   //有效IP段
                path.addLast(ipSegment+"");
                dfs(s,len,split+1,begin+i+1,path,res);
                path.removeLast();
            }
        }
    }

没能自己独立解决。

——2020.6.29

我的前方是万里征途,星辰大海!!
原文地址:https://www.cnblogs.com/taoyuxin/p/13206373.html