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; } };