zoukankan      html  css  js  c++  java
  • leetcode93

     1 class Solution {
     2     public List<String> restoreIpAddresses(String s) {
     3         List<String> addresses = new ArrayList<>();
     4         StringBuilder tempAddress = new StringBuilder();
     5         doRestore(0, tempAddress, addresses, s);
     6         return addresses;
     7     }
     8 
     9     private void doRestore(int k, StringBuilder tempAddress, List<String> addresses, String s) {
    10         if (k == 4 || s.length() == 0) {
    11             if (k == 4 && s.length() == 0) {
    12                 addresses.add(tempAddress.toString());
    13             }
    14             return;
    15         }
    16         for (int i = 0; i < s.length() && i <= 2; i++) {
    17             if (i != 0 && s.charAt(0) == '0') {
    18                 break;
    19             }
    20             String part = s.substring(0, i + 1);
    21             if (Integer.valueOf(part) <= 255) {
    22                 if (tempAddress.length() != 0) {
    23                     part = "." + part;
    24                 }
    25                 tempAddress.append(part);
    26                 doRestore(k + 1, tempAddress, addresses, s.substring(i + 1));
    27                 tempAddress.delete(tempAddress.length() - part.length(), tempAddress.length());
    28             }
    29         }
    30     }
    31 }

    回溯法,合法的ip地址,一共分四段,每段的数值在0~255之间。因此程序需要判断分段的位置,也就是加“.”的位置。

    例如:25525511135,要进行分段,判断顺序如下:

    先分成2.5.5.2,但后续还有字符(5511135),因此这种划分不合法,第一次进入10行之后,不满足11行判断条件,则执行14行返回。

    再分成2.5.5.25,但后续还有字符(511135),因此也不合法。

    再分成2.5.5.255,但后续还有字符(11135),因此也不合法。

    因此第三段不能只分一位数字5,而分为两位数字52:分成2.5.52.5不合法,2.5.52.55不合法,2.5.52.551,最后一段不满足第21行的条件,也不合法。

    因此第三段不能分两位数字52,而尝试分为三位数字2.5.525.***,525超过了255,也不合法。

    那第二段就需要调整,分成2.55.***,按照这种方式依次尝试“加点”分段,当划分到255.255.11.135时,得到一个合法解。

    继续划分,会得到另一个合法解:255.255.111.35。

    至此,程序得出所有合法解。

  • 相关阅读:
    undefined reference to cv::imread(cv::String const&, int)
    ubuntu gcc 降级 适应matlab
    ubuntu 迅雷 XwareDesktop
    python 包 安装 加速 pip anaconda
    ubuntu classicmenu-indicator
    ubuntu 电源管理
    apue.h头文件(UNIX环境高级编程)
    ubuntu 12.04 下nginx安装步骤
    Ubuntu12.04 64bit 下安装VNC server
    TLD视觉跟踪算法
  • 原文地址:https://www.cnblogs.com/asenyang/p/10997752.html
Copyright © 2011-2022 走看看