class Solution {
public:
bool match(string s)
{
if(s.length()==1&&s>="0"&&s<="9")
return true;
if(s.length()==2&&s>="10"&&s<="99")
return true;
if(s.length()==3&&s>="100"&&s<="255")
return true;
return false;
}
void select(int index,int num,string s,string res,vector<string> &ans)//index[0-s.length()],num[1-5]
//res为一个合格的ip,ans为所有合格的ip的集合
{
if(num==5)
{
if(index==s.length())
ans.push_back(res);
return;
}
if(index>=s.length())//溢出了
return;
for(int i=1;i<=3;i++)
//没溢出且尚未到头时,枚举后面的一个、两个、三个字符的组合,看是否合格,并递归继续枚举后面的下一段
{
string tmpStr(s,index,i);
//string tmpstr(s,stridx,strlen);将字符串s内"始于stridx且长度顶多strlen"的部分作为字符串的初值
if(match(tmpStr))
{
string tmpRes=res+tmpStr;
if(num!=4)
tmpRes+=".";
select(index+i,num+1,s,tmpRes,ans);//递归检验下一段
}
}
}
vector<string> restoreIpAddresses(string s) {
// Note: The Solution object is instantiated only once and is reused by each test case.
vector<string> ans;
select(0,1,s,"",ans);
return ans;
}
};
【leetcode】Restore IP Addresses
最新推荐文章于 2019-05-24 09:26:32 发布