93. 复原IP地址

题目

93. 复原IP地址

我的思路

比较明显,递归深搜处理比较方便。设定一个指针指向字符串首,每次可以后移1,2,或3个位置。总共需要后移4次,且刚好滑过整个字符串。同时要保证每次划过的数字在0-255之间即可。

我的实现

class Solution {
public:
    vector<string> result;
    string ss;
    void process(const int length,int pos,int id,string str)
    {
        //cout<<"check"<<pos<<"	"<<id<<"	"<<str<<endl;
        if(pos>length)return;
        if(id>4&&pos==length){str.erase(str.end()-1);result.push_back(str);}
        if((5-id)*3<length-pos||(5-id)>length-pos)return;
        
            str = str + ss[pos++];
            process(length,pos,id+1,str+'.');
            if(ss[pos-1]=='0')return;
            str = str + ss[pos++];
            
            process(length,pos,id+1,str+'.');
            str = str + ss[pos++];
            if(ss[pos-3]-'0'>2||(ss[pos-2]-'0'>5&&ss[pos-3]-'0'==2)||(ss[pos-2]-'0'==5&&ss[pos-3]-'0'==2&&ss[pos-1]-'0'>5))return;
            process(length,pos,id+1,str+'.');
            
        
    }
    vector<string> restoreIpAddresses(string s) {
        
        ss = s;
        vector<string> a;
        if(s.size()<4||s.size()>12)return a;
        int pos = 0;
        int id = 1;
        string str;
        process(s.size(),pos,id,str);
        return result;

    }
};
/**/

拓展学习

原文地址:https://www.cnblogs.com/BoysCryToo/p/13462707.html