给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。
示例:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]
该题是列出所有可能的ip地址格式,属于在一个范围内找到所有符合条件类的题,因此直接使用回溯法即可,重点在于剪枝部分。
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string>res;
if(s.size()==0)return res;
vector<string>cur;
backtrack(s,0,cur,res);
return res;
}
void backtrack(string s,int index,vector<string>&cur,vector<string>&res){
if(cur.size()==4){
if(index==s.size()){
string str=cur[0]+"."+cur[1]+"."+cur[2]+"."+cur[3];
res.push_back(str);
}
return;
}
for(int i=1;i<=3;++i){
if(index+i>s.size())break;
string temp=s.substr(index,i);
if((temp[0]=='0' && temp.size()>1) || stoi(temp)>255)continue;
cur.push_back(temp);
backtrack(s,index+i,cur,res);
cur.pop_back();
}
}
};