• [Leetcode] restore ip address 存储IP地址


    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)

     题意:给定一由纯数字组成的字符串,以IP地址的形式存储。

    思路:首先要明白IP地址的书写形式。IP地址由32位二进制数组成,常以XXX.XXX.XXX.XXX形式表现,每组XXX代表小于或等于255的10进制数,故IP地址总共有四段,每一段可能有一到三位,范围是[0, 255],题目明确指出输入字符串只含有数字。

    两点要注意:一、当某段是三位时,我们要判断其是否越界(>255);二、当只有一位时,0可以成某一段,如果有两位或三位时,像 00, 01, 001, 011, 000等都是不合法的。

    可以看做是字符串的分段问题,在输入字符串中加入三个点,将字符串分为四段,每一段都要是合法的(条件见上面两点)。使用递归法,我们用k来表示当前还需要分的段数,终止条件是当如果k = 0(则表示三个点已经加入完成,四段已经形成),若这时字符串刚好为空即s.empty(),这种个字符串是合法的。若k != 0, 则对于每一段,我们分别用一位,两位,三位来尝试,分别判断其合不合法,如果合法,则调用递归继续分剩下的字符串,最终和求出所有合法组合。

    参考了Grandyang的博客。代码如下:

     1 class Solution {
     2 public:
     3     vector<string> restoreIpAddresses(string s) 
     4     {
     5         vector<string> res;
     6         restore(s,res,4,"");
     7         return res;    
     8     }
     9 
    10     void restore(string s,vector<string> &res,int k,string str)
    11     {
    12         if(k==0&&s.empty())
    13             res.push_back(str);
    14         else
    15         {
    16             for(int i=1;i<4;++i)
    17             {
    18                 if(s.size()>=i&&isValid(s.substr(0,i)))
    19                 {
    20                     if(k==1)
    21                         restore(s.substr(i),res,k-1,str+s.substr(0,i));
    22                     else
    23                         restore(s.substr(i),res,k-1,str+s.substr(0,i)+".");
    24                 }
    25             }
    26         }
    27     }
    28 
    29     bool isValid(string s)
    30     {
    31         if(s.size()>3||s.empty()||(s.size()>1&&s[0]=='0'))
    32             return false;
    33         int val=atoi(s.c_str());
    34         return val>=0&&val<=255;    
    35     }
    36 };

    可以将第20~23行简写为如下:

    1 restore(s.substr(i),k-1,str+s.substr(0,i)+(k==1?"":"."),res);
  • 相关阅读:
    struts2 namespace
    struts2 action跳转及传参
    struts2 后缀问题
    MyEclipse 配置多个Tomcat运行
    tomcat 免安装版 内存溢出
    Tomcat安装版 内存溢出
    JSON 数据的两种遍历方式
    Struts2 返回 JSON数据
    Struts2 参数传递的两种模式
    JQuery + Ajax 传递参数
  • 原文地址:https://www.cnblogs.com/love-yh/p/7207368.html
Copyright © 2020-2023  润新知