题目描述:
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
Example:
Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]
将一串字符串还原为可能的IP地址。自然还是递归的方法,每次递归到一个字符都可以截取之前的一段作为IP地址中的一段,所以还需要判断截取的一段是否为合法的IP地址。
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> result;
int i=0;
string cur;
int count=0;
restoreIpAddress_recur(s,i,count,cur,result);
return result;
}
void restoreIpAddress_recur(string s, int i, int count, string cur, vector<string> &result)
{
if(count==3)
{
string rest=s.substr(i,s.size()-i);
if(isValid(rest))
{
cur+="."+rest;
result.push_back(cur);
}
return;
}
else if(i==s.size()-1) return;
else
{
string temp=s.substr(0,i+1);
if(isValid(temp))
{
#不加入当前Ip地址
restoreIpAddress_recur(s,i+1,count,cur,result);
#加入当前Ip地址
if(count==0) cur+=temp;
else cur+="."+temp;
restoreIpAddress_recur(s.substr(i+1,s.size()-i-1),0,count+1,cur,result);
}
else return;
}
}
bool isValid(string x)
{
if(x.size()>3||x.size()==0||(x.size()>1&&x[0]=='0')) return false;
if(x.size()==3&&x>"255") return false;
return true;
}
};