题解 | 数字字符串转化成IP地址

数字字符串转化成IP地址

https://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e

#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串vector
     */
     bool isValid(string& part)//选取的字符串是否有效
     {
        if(part.empty()||part.size()>3)//如果长度为空或者长度大于3,则无效
        {
            return false;
        }
        if(part[0]=='0'&&part.size()>1)////如果长度大于1,出现前导为0则无效
        {
            return false;
        }
        int num=stoi(part);
        if(num<0||num>255)//如果超过255或者小于0也是无效
        {
            return false;
        }
        return true;
     }
     void BackTrack(string s,int start,vector<string>& temp,vector<string>& res)
     {
         if(temp.size()==4)//已经选了4段
         {
            if(start==s.size())//s里的都选完了
            {
                string ip=temp[0]+'.'+temp[1]+'.'+temp[2]+'.'+temp[3];
                res.push_back(ip);
            }
            return;
         }

         int nextstart=s.size()-start;//剩余的字符串数目
         int remain=4-temp.size();//一个ip共4段,还剩几段
         if(nextstart<remain||nextstart>remain*3)//如果剩余的字符串数目比剩余的段数还小,即便是都选1位也不够或者剩余太多,即便是都选3位也不够
         {
            return;
         }
         for(int len=1;len<=3&&start+len<=s.size();len++)//选取1、2、3位都试试,并且保证选取的长度不要越界
         {
             string part=s.substr(start,len);//从起始位置start开始,选取len个字符构成字符串
             if(isValid(part))
             {
                temp.push_back(part);
                BackTrack(s,start+len, temp, res);
                temp.pop_back();
             }
         }


     }
    vector<string> restoreIpAddresses(string s) {
        // write code here
        vector<string> res;
        if(s.size()==0)
        {
            return res;
        }
        vector<string> temp;
        BackTrack(s,0,temp,res);
        return res;
    }
};

全部评论

相关推荐

12-24 20:52
武汉大学 Java
点赞 评论 收藏
分享
12-13 14:51
已编辑
井冈山大学 算法工程师
龙虾x:算法比你强的没有你美,比你美的…..算了已经没有比你美的了
工作两年想退休了
点赞 评论 收藏
分享
12-23 18:51
中南大学 Java
唉又萌混过关:是不是那种收钱盖实习章的机构?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务