93. Restore IP Addresses

来源:互联网 发布:转炉煤气 优化控制 编辑:程序博客网 时间:2024/05/22 07:04
//4msclass Solution {public:    void get_IP(vector<string> &v,string &temp,string &s,int begin,int num)    {        if(num==4)         {            if(begin==s.size()) v.push_back(temp);            temp+=".";            return;        }        else if(num!=0) temp+=".";        if(begin>=s.size()) return;        int len=s.size()-begin;        temp.push_back(s[begin]);        get_IP(v,temp,s,begin+1,num+1);        temp.pop_back();        temp.pop_back();        if(len>1&&s[begin]!='0')        {            temp.push_back(s[begin]);            temp.push_back(s[begin+1]);            get_IP(v,temp,s,begin+2,num+1);            temp.pop_back();            temp.pop_back();            temp.pop_back();        }        if(len>2)        {            string s0(s.begin()+begin,s.begin()+begin+3);             if(s0>="100"&&s0<="255")             {                temp+=s0;                get_IP(v,temp,s,begin+3,num+1);                temp.pop_back();                temp.pop_back();                temp.pop_back();                temp.pop_back();            }        }    }    vector<string> restoreIpAddresses(string s) {        vector<string> v;        string temp;        get_IP(v,temp,s,0,0);        return v;    }};
//0msclass Solution {public:    void get_IP(vector<string> &v,string &temp,string &s,int begin,int num)    {        if(num==4&&begin==s.size()) v.push_back(temp);        if(num!=0) temp+=".";        if(begin>=s.size()||num==4) return;        bool flag=true;        for(int i=1;i<=3;i++)        {            if(i==1) temp.push_back(s[begin]);            else if(s.size()-begin>=i&&s[begin]!='0')            {                if(i==2)                {                    flag=true;                    temp.push_back(s[begin]);                    temp.push_back(s[begin+1]);                                    }                else                {                    string s0(s.begin()+begin,s.begin()+begin+3);                     if(s0>="100"&&s0<="255")                     {                        flag=true;                        temp+=s0;                           }                }            }            if(flag)             {                int k=i;                get_IP(v,temp,s,begin+i,num+1);                while(k-->=0) temp.pop_back();                flag=false;            }        }    }    vector<string> restoreIpAddresses(string s) {        vector<string> v;        string temp;        get_IP(v,temp,s,0,0);        return v;    }};
0 0
原创粉丝点击