给一个由数字组成的字符串。求出其可能恢复为的所有IP地址。
样例
给出字符串 "25525511135"
,所有可能的IP地址为:
[
"255.255.11.135",
"255.255.111.35"
]
(顺序无关紧要)
class Solution {
public:
/**
* @param s the IP string
* @return All possible valid IP addresses
*/
vector<string> restoreIpAddresses(string& s) {
// Write your code here
int n = s.length();
vector<string> buf;
vector<string> result;
visit(s, 1, 0, n, buf, result);
return result;
}
private:
void visit(string &s, int index, int begin, int n, vector<string> &buf, vector<string> &result)
{
if (begin >= n || index > 4)
{
return;
}
if (index == 4)
{
if (n-begin > 3)
{
return;
}
string temp = s.substr(begin);
if (n-begin < 3 || temp <= "255")
{
if ((n-begin) > 1 && s[begin] == '0')
{
return;
}
buf.push_back(temp);
string a;
for (int i = 0; i < 3; i++)
{
a += buf[i] + ".";
}
a += buf[3];
result.push_back(a);
buf.pop_back();
}
return;
}
for (int len = 1; len <= 3; len++)
{
if (len == 1)
{
buf.push_back(s.substr(begin, len));
visit(s, index+1, begin+len, n, buf, result);
buf.pop_back();
}
else if (len == 2)
{
if (s[begin] == '0')
{
continue;
}
else
{
string temp = s.substr(begin, 2);
buf.push_back(temp);
visit(s, index+1, begin+len, n, buf, result);
buf.pop_back();
}
}
else
{
if (s[begin] == '0')
{
continue;
}
else
{
string temp = s.substr(begin, 3);
if (temp <= "255")
{
buf.push_back(temp);
visit(s, index+1, begin+len, n, buf, result);
buf.pop_back();
}
}
}
}
}
};