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:
bool ok(string sub)
{
if(sub.length() == 1)
if("0" <= sub && sub <= "9")
return true;
if(sub.length() == 2)
if("10" <= sub && sub <= "99")
return true;
if(sub.length() == 3)
if("100" <= sub && sub <= "255")
return true;
return false;
}
void dfs(string s, int dep, int start, vector<string> &ans, vector<string> &tmp)
{
if(start == s.length())
{
if(dep == 4)
{
string ip = tmp[0];
for(int i=1; i<4; i++)
ip += "." + tmp[i];
ans.push_back(ip);
}
return;
}
for(int k=1; k<=3 && start+k-1string subIP = s.substr(start, k);
if(ok(subIP))
{
tmp.push_back(subIP);
dfs(s, dep+1, start+k, ans, tmp);
tmp.pop_back();
}
}
}
vector<string> restoreIpAddresses(string s)
{
vector<string> ans;
vector<string> tmp;
if(s.length() <4 || s.length() > 12)
return ans;
dfs(s, 0, 0, ans, tmp);
return ans;
}
};