美文网首页NEEDREVIEWD
93. Restore IP Addresses[DFS]

93. Restore IP Addresses[DFS]

作者: DrunkPian0 | 来源:发表于2017-06-02 01:01 被阅读16次

    NAIVE 解法,O(n3):

        public List<String> restoreIpAddresses(String s) {
            int len = s.length();
            List<String> res = new ArrayList<>();
            if (len < 4 || len > 12) return res;
    //      for (int i = 1; i < len - 2; i++)
    //          for (int j = i + 1; j < len - 1; j++)
    //              for (int k = j + 1; k < len; k++) {
    //      加上j < i + 4这个条件可以少循环很多次
            for (int i = 1; i < 4 && i < len - 2; i++)
                for (int j = i + 1; j < i + 4 && j < len - 1; j++)
                    for (int k = j + 1; k < j + 4 && k < len; k++) {
                        if (isValid(s.substring(0, i))
                                && isValid(s.substring(i, j))
                                && isValid(s.substring(j, k))
                                && isValid(s.substring(k, len))) {
                            String seg = s.substring(0, i) + "." + s.substring(i, j) + "." + s.substring(j, k) + "." + s.substring(k, len);
                            res.add(seg);
                        }
                    }
            return res;
        }
    
        private boolean isValid(String s) {
            if (s.length() > 3) return false;
            if (s.length() > 1 && s.charAt(0) == '0') return false;
            return Integer.parseInt(s) <= 255;
        }
    
    

    dfs

    dfs解法我写了一个,我想的是类似Combination Sum那种的;但是运行时报错outOfRange -1。但是不知道哪里有错。而且,我不知道这个思路哪里有问题。递归还是难。先贴这儿:

        public List<String> restoreIpAddresses(String s) {
            int len = s.length();
            List<String> res = new ArrayList<>();
            if (len < 4 || len > 12) return res;
            dfs(s, res, 0, 0, "");
            return res;
        }
    
        private void dfs(String s, List<String> res, int count, int idx, String ans) {
            if (count == 4 && idx == s.length() - 1) {
                res.add(ans);
            }
            for (int i = idx; i < s.length(); i++) {
                if (idx > s.length()) break;
                if (!isValid(s.substring(i, idx + 1))) continue;
                ans += s.substring(i, idx + 1);
                dfs(s, res, ++count, ans.length(), ans);
            }
    
        }
    
        private boolean isValid(String s) {
            if (s.length() == 0 || s.length() > 3) return false;
            if (s.length() > 1 && s.charAt(0) == '0') return false;
            return Integer.parseInt(s) <= 255;
        }
    
    

    相关文章

      网友评论

        本文标题:93. Restore IP Addresses[DFS]

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