题目
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; } }; /* 取 */