美文网首页
Restore IP Addresses

Restore IP Addresses

作者: 瞬铭 | 来源:发表于2019-09-25 14:52 被阅读0次

    https://leetcode.com/problems/restore-ip-addresses/
    IP切分,给出一个字符串,求出能切分成字符串的所有可能
    例:Input: "25525511135"
    Output: ["255.255.11.135", "255.255.111.35"]

     public List<String> restoreIpAddresses(String s) {
            List<String> res = new ArrayList();
            if (s == null || s.length() == 0 || s.length() < 4 || s.length() > 12) {
                return res;
            }
            IpHelper(s, 0, "", res);
            return res;
        }
    
        //怎么翻译这个function,怎么翻译?怎么翻译?怎么翻译?怎么翻译?
        //对于输入string s,当前递归到了第n段(一个IP段总共由4个0~255的int组成)
        //临时的结果out
        //最终结果res
        public void IpHelper(String s, int n, String out, List<String> res) {
            //当n此时为第4段的时候,IP段走到了int的最后一个int
            if (n == 4) {
                //当s为空的时候,out此时可以作为一个结果
                //至于out是不是合法的,在上一个迭代的val那一步已经判断的,所以一定是合法的
                if (s.isEmpty()) {
                    res.add(out);
                }
                return;
            }
    
            //k表明取s子串的个数,因为每一个数字都在0~255之间,所以子串的位数是在1~3之间
            for (int k = 1; k < 4; k++) {
    
                //可能出现剩余的s本身就不够3位了,所以循环直接终止
                if (s.length() < k) {
                    break;
                }
    
                //针对s,直接取大小为k的子串,并转换为整形
                int val = Integer.parseInt(s.substring(0, k));
    
                //整形的范围判断,大于255 则失败
                //第二个条件,为了避免255010123321,这是切分了255.010.123.321,当此时的val是010,intval后为10,不符合条件
                // "10"的length为2,而此时k为3
                if (val > 255 || k != String.valueOf(val).length()) {
                    continue;
                }
    
                //来来来,我们先翻译一下s.substring(k)
                //Returns a string that is a substring of this string. The
                //substring begins with the character at the specified index and
                //extends to the end of this string.
                //所以255255123123 ,k=1的时候  s.substring(1) = 55255123123,当k=2,3的时候类推
                //下一个迭代,需要计算下一个int,所以n+1
                IpHelper(s.substring(k), n + 1, out + s.substring(0, k) + (n == 3 ? "" : "."), res);
            }
        }
    

    相关文章

      网友评论

          本文标题:Restore IP Addresses

          本文链接:https://www.haomeiwen.com/subject/ywtcuctx.html