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> ret;
bool check(string s)
{
int size = s.length();
int i;
if(size == 1)
{
return "0" <= s && s <= "9";
}
else if(size == 2)
{
return "10" <= s && s <= "99";
}
else
{
return "100" <= s && s <= "255";
}
}
void restoreHelper(string s, vector<string> &ans, int beg, int dep)
{
if(dep == 4 && beg == s.length())
{
ret.push_back(ans[0] + "." + ans[1] + "." + ans[2] + "." +ans[3]);
return;
}
if(beg >= s.length() || dep >= 4)
{
return;
}
int i;
for(i = beg;i < (beg + 3) && i < s.length();i ++)
{
string tmp(s,beg,i-beg+1);
if(check(tmp))
{
ans.push_back(tmp);
restoreHelper(s,ans,i+1,dep+1);
ans.pop_back();
}
}
}
vector<string> restoreIpAddresses(string s) {
ret.clear();
vector<string> ans;
restoreHelper(s,ans,0,0);
return ret;
}
};