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 &s)
{
int a = atoi(s.c_str());
if(s.size() > 1 && s[0] == '0')
return false;
if(a >= 0 && a <= 255)
return true;
return false;
}
void dfs(int k, int dep, string ip, vector<string> &ans, string s)
{
if(dep >= s.size())
{
if(k == 4)
ans.push_back(ip);
}
for(int i=1; dep+i<=s.size() && i<=3; i++)
{
string sub = s.substr(dep, i);
if(ok(sub))
{
if(k == 0)
dfs(k+1, dep+i, ip+sub, ans, s);
else
dfs(k+1, dep+i, ip+"."+sub, ans, s);
}
}
}
vector<string> restoreIpAddresses(string s)
{
vector<string> ans;
int n = s.size();
if(n < 4)
return ans;
string ip = "";
dfs(0, 0, ip, ans, s);
return ans;
}
};