zoukankan      html  css  js  c++  java
  • [leetcode] Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combinations.

    For example:
    Given "25525511135",

    return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)

    https://oj.leetcode.com/problems/restore-ip-addresses/

    思路:要打印所有的结果,只能dfs枚举了。

    import java.util.ArrayList;
    import java.util.List;
    
    public class Solution {
        public List<String> restoreIpAddresses(String s) {
            List<String> res = new ArrayList<String>();
            if (s.length() > 12)
                return res;
            StringBuilder sb = new StringBuilder();
            dfs(res, sb, s, 0);
            return res;
    
        }
    
        private void dfs(List<String> res, StringBuilder sb, String s, int depth) {
            // System.out.println("sb:" + sb + ",s:" + s + ",depth:" + depth);
            if (depth > 4)
                return;
            if (depth == 4) {
                if (!s.equals(""))
                    return;
                else {
                    res.add(sb.toString().substring(0, sb.length() - 1));
                }
    
            }
    
            for (int i = 1; i <= s.length() && i <= 3; i++) {
                String toInsert = s.substring(0, i);
                if (isValid(toInsert)) {
                    sb.append(toInsert + ".");
                    dfs(res, sb, s.substring(i), depth + 1);
                    sb.delete(sb.length() - i - 1, sb.length());
                }
            }
    
        }
    
        private boolean isValid(String toInsert) {
            int num = Integer.parseInt(toInsert);
    
            if (num > 255)
                return false;
    
            if (num != 0 && toInsert.startsWith("0") || num == 0 && !toInsert.equals("0"))
                return false;
    
            return true;
        }
    
        public static void main(String[] args) {
            String s = "010010";
            System.out.println(new Solution().restoreIpAddresses(s));
        }
    }
    View Code

    第二遍记录:

      注意用level控制递归的层次。

      注意StringBuilder删除的方法。

      注意valid的条件。

    public class Solution {
        public List<String> restoreIpAddresses(String s) {
            List<String> res = new ArrayList<String>();
            if (s.length() > 12 || s.length() < 4)
                return res;
            StringBuilder sb = new StringBuilder();
            restoreIp(res, sb, s, 0);
            return res;
        }
    
        private void restoreIp(List<String> res, StringBuilder sb, String s, int level) {
            if (level > 4)
                return;
            if (level == 4) {
                if (s.equals("")) {
                    res.add(sb.toString().substring(0, sb.length() - 1));
                } else
                    return;
            }
    
            for (int i = 1; s.length() >= i && i < 4; i++) {
                String toInsert = s.substring(0, i);
                if (isValid(toInsert)) {
                    sb.append(toInsert + '.');
                    restoreIp(res, sb, s.substring(i), level + 1);
                    sb.delete(sb.length() - i - 1, sb.length());
                }
    
            }
    
        }
    
        private boolean isValid(String s) {
            int num = Integer.parseInt(s);
            if (num > 255)
                return false;
            if (num != 0 && s.startsWith("0") || num == 0 && !s.equals("0"))
                return false;
    
            return true;
    
        }
    
    
    
    }

    第三遍记录:

      注意level的运用,>4的情况直接终止。

      注意每次取substring的时候,注意判断是否超出范围。

  • 相关阅读:
    docker参数--restart=always的作用
    docker参数expose使用
    Linux主机添加路由和端口转发
    docker自动开启端口转发功能
    【Tips】【UE】总结自己常用的UltraEdit使用技巧
    浅谈I2C总线
    I2C总线简介(很经典)
    ECN
    视频编码未来简史
    爬虫与反爬虫
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3819330.html
Copyright © 2011-2022 走看看