Leetcode No.93

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

示例:

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

解答:遇到这种问题第一想到的就是用递归函数来求解。在这道题实际上也是可以这样处理的。

递归函数逻辑如下:

【1】如果已经取到了四个字符且字符串已经被取完,那么所取字符串符合要求,保存(为了加快速度,这里采用 s.size()>(4-n)*3 一个判断条件);

【2】依次提取字符串的前一个、前二个、前三个字符串,并转化成十进制数字,判断是否符合要求(如果所取字符数大于1那么首字符不能为 ’0‘ );是则进行递归处理();

 

  void restoreIpAddressesHelper(string s,vector<string>&res,string out,int n)
{
    if(n==4 || s.size()>(4-n)*3)
    {
       if(s.empty()) res.push_back(out);
       return;
    }
    string num;
    for(int i=1;i<4;i++)
    {
        num = s.substr(0,i);
        if(atoi(num.c_str())<256  && (i>1?num[0]!='0':true) && (int)s.size()>=i)
            restoreIpAddressesHelper(s.substr(i),res, out+(n==0?"":".")+num,n+1);
    }
}
//93
vector<string> restoreIpAddresses(string s)
{
    vector<string> res;
    if(s.size()>12 || s.size()<4) return res;
    string temp;
    restoreIpAddressesHelper(s,res,"",0);
    return res;
}//93

 

posted @ 2019-05-08 16:50  andyalgorithm  阅读(173)  评论(0)    收藏  举报