1. 程式人生 > 實用技巧 >93. 復原IP地址 - 8月9日

93. 復原IP地址 - 8月9日

題目

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<<"\t"<<id<<"\t"<<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; } }; /**/

拓展學習