您的位置:首页 > 其它

【leetcode】Restore IP Addresses

2015-01-03 10:52 495 查看

Restore IP Addresses

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)

利用回溯法,注意几种情况:
0.0.0.0是合法的
01.1.1.1是不合法的
“10000”只能拆成10.0.0.0

class Solution {
public:
vector<string> restoreIpAddresses(string s) {

vector<string> result;
string tmp="";
bt(s,result);
return result;

}

void bt(string s,vector<string> &result,int start=0,string tmp="",int left=5)
{
left--;
int n=s.length();

//找到的条件
if(left==0&&start==n)
{
//去除最后一个点
tmp.pop_back();
result.push_back(tmp);
return;
}

//停止条件
if(left==0||(n-start)/left>3||(n-start)/left==0||start>n)
{
return;
}

string tmpStr;
if(n-start>=1)
{
tmpStr=tmp;
string str1=s.substr(start,1);
tmp+=str1;
bt(s,result,start+1,tmp+".",left);
tmp=tmpStr;
}

if(n-start>=2&&s[start]!='0')
{
tmpStr=tmp;
string str2=s.substr(start,2);
tmp+=str2;
bt(s,result,start+2,tmp+".",left);
tmp=tmpStr;
}

if(n-start>=3&&s[start]!='0')
{
tmpStr=tmp;
string str3=s.substr(start,3);
int n = atoi(str3.c_str());

if(n<=255)
{
tmp+=str3;
bt(s,result,start+3,tmp+".",left);
tmp=tmpStr;
}
}

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: