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:
void restore(string &s, vector<string> &ret, int n, string s1, int i)
{
int m = s.size();
if(n == 4)
{
if(i == m)ret.push_back(s1);
return;
}
if(n > 0) s1 += '.';
int num = 0;
int count = 0;
while(i < m)
{
num *= 10;
num += (s[i]-'0');
if(num < 256)
{
s1 += s[i];
restore(s,ret,n+1,s1,i+1);
if(s[i] == '0' && count == 0) break;
}
else break;
i++;
count++;
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> ret;
string s1;
restore(s,ret,0,s1,0);
return ret;
}
};