复原IP地址 (回溯+剪枝)
题目描述
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
代码
判断和 255 的大小关系还是有点儿费劲
class Solution {
public:
vector<string> ans;
string cur;
vector<string> restoreIpAddresses(string s) {
if(s.length() > 12 || s.length() < 4)
return ans;
back_trace(s, 0, 0);
return ans;
}
void back_trace(string s, int pos, int n){
if(n == 4){
if(cur.length() == s.length()+3)
ans.push_back(cur);
return;
}
for(int i = pos; i < s.length(); i++){
for(int j = 1; j < 4; j++){
string oldcur = cur;
string temp = s.substr(i, j);
int val = stoi(temp);
if (val > 255 || j != to_string(val).size()) continue;
cur = cur + temp + (n == 3 ? "" : ".");
back_trace(s, i+j, n+1);
cur = oldcur;
}
}
}
};