class Solution {
public:
/**
*
* @param s string字符串
* @return string字符串vector
*/
vector<string> ans;
void backtrace(string& s, int cnt, int index, string& str) { // cnt表示ip地址转换了几个节点,index表示从字符串s的开始索引s
if(cnt==4 || index==s.size()) {
if(cnt==4 && index==s.size())
ans.push_back(str.substr(0, str.size() - 1));
return;
}
for(int i = 1; i <= 3; i++) {
if(index + i > s.size())
return;
if(s[index]=='0' && i!=1) // 第一个字节可以是‘0’
return;
if(i==3 && s.substr(index, i)>"255")
return;
str +=s.substr(index,i);
str.push_back('.');
backtrace(s, cnt+1, index+i, str);
str = str.substr(0, str.size() - i - 1); // 回溯,保存原始状态
}
}
vector<string> restoreIpAddresses(string s) {
// write code here
string res;
backtrace(s,0,0,res);
return ans;
}
};