在前文leetcode131分割回文串的基础上改进,因为前面遍历的是字符串及其子串问题,93题刚好基于这个问题之上进行改进,因此我也就是修修补补就完事儿了
toIP函数的作用是把“255”,“255” ,“255” ,“255”组成的vector<string>变换成"255.255.255.255"的string,然再结果集中push_back进去。
deleteZero函数作用是删除前导0,比如"255",“01”,“003”,“5”,变成"255",“1”,“3”,“5”
class Solution {
public:
vector<string> ele;
vector<string> ans;
int len=0;
vector<string> restoreIpAddresses(string s) {
dfs(s,0);
return ans;
}
void dfs(string& s,int idx){
if(ele.size()==4&&len==s.size()){
string* newS=toIP(&ele);
ans.push_back(*newS);
return;
}
for(int i=idx;i<s.size();++i){
if(i-idx+1>=4){
continue;
}
string ip=s.substr(idx,i-idx+1);
int num=std::stoi(ip);
if(num==0&&ip.size()==1){
ele.push_back(ip);
len+=ip.size();
}
else if(num>0&&num<=255){
deleteZero(ip);
ele.push_back(ip);
len+=ip.size();
}else {
continue;
}
dfs(s,i+1);
ele.pop_back();
len-=ip.size();
}
}
void deleteZero(string& s){
auto iter=s.begin();
while(*s.begin()=='0'){
iter=s.erase(s.begin());
}
}
string* toIP(vector<string>* pV){
string* vs=new string();
for(auto& item:*pV){
vs->append(item);
vs->append(".");
}
vs->pop_back();
return vs;
}
};