Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given "25525511135",
return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)
class Solution {
public:
vector<string> ans;
int pos[4];
vector<string> restoreIpAddresses(string s) {
dfs(0,4,s,0);
return ans;
}
void dfs(int dep,int maxDep,string s,int start){
if(dep == maxDep){
if(start == s.size()){
int beg = 0;
string addr;
for(int i = 0;i < maxDep;i ++){
string ip(s,beg,pos[i] - beg + 1);
addr += i == 0 ? ip : "." + ip;
beg = pos[i] + 1;
}
ans.push_back(addr);
}
return;
}
for(int i = start;i < s.size();i ++){
string num(s,start,i - start + 1);
if(check(num)){
pos[dep] = i;
dfs(dep + 1,maxDep,s,i + 1);
}
}
}
bool check(string num){
if(num.length()==1 && num>="0" && num<="9")return true;
if(num.length()==2 && num>="10" && num<="99")return true;
if(num.length()==3 && num>="100" && num<="255")return true;
return false;
}
};
本文详细阐述了如何通过递归深度优先搜索算法,从给定的数字字符串中生成所有可能的有效IP地址组合。
803

被折叠的 条评论
为什么被折叠?



