• 93. 复原IP地址


    给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

    示例:

    输入: "25525511135"
    输出: ["255.255.11.135", "255.255.111.35"]

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/restore-ip-addresses
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

     1 class Solution {
     2     private void helper(String s, int i,int cnt, List<Integer> res,List<String> result) {
     3         if (cnt == 4) {
     4             String s1 = s.substring(0,res.get(0));
     5             String s2 = s.substring(res.get(0), res.get(1));
     6             String s3 = s.substring(res.get(1), res.get(2));
     7             String s4 = s.substring(res.get(2), s.length());
     8             if (Integer.parseInt(s4) <= 255 && s4.length() <= Integer.toString(Integer.parseInt(s4)).length())
     9                 result.add(Integer.parseInt(s1)+"."+Integer.parseInt(s2)+"."+Integer.parseInt(s3)+"."+Integer.parseInt(s4));
    10             return ;
    11         }
    12 
    13         for (int j = i+1; j < s.length(); j++) {
    14             // 判断划分是否合理
    15             String s0 = s.substring(i,j);
    16             int i1 = Integer.parseInt(s0);
    17             if (i1 > 255)
    18                 break;
    19             if (s.length() - j > (3-cnt+1)*3)
    20                 continue;
    21             if (s0.length() > Integer.toString(i1).length()) {
    22                 break;
    23             }
    24 
    25             res.add(j);
    26             helper(s, j, cnt+1, res, result);
    27             res.remove(res.size()-1);
    28         }
    29     }
    30 
    31     public List<String> restoreIpAddresses(String s) {
    32         List<Integer> res = new ArrayList<>();
    33         List<String> result = new ArrayList<>();
    34         // 首次划分(第一个小数点的位置)
    35         for (int i = 1; i < s.length(); i++) {
    36             String s0 = s.substring(0, i);
    37             int i1 = Integer.parseInt(s0);
    38             if (i1 > 255)
    39                 break;
    40             if (s.length() - i > 3*3)
    41                 continue;
    42             if (s0.length() > Integer.toString(i1).length()) {
    43                 break;
    44             }
    45             res.add(i);
    46             helper(s, i, 2, res, result);
    47             res.remove(res.size()-1);
    48         }
    49         return result;
    50     }
    51 }
  • 相关阅读:
    2016huasacm暑假集训训练四 递推_A
    2016huasacm暑假集训训练三 G
    2016huasacm暑假集训训练三 F
    今年暑假不AC
    Who's in the Middle
    The Suspects
    食物链
    抓牛问题
    士兵队列训练问题
    H
  • 原文地址:https://www.cnblogs.com/yfs123456/p/11602001.html
Copyright © 2020-2023  润新知