您的位置:首页 > 职场人生

113_Restore IP Addresses

2014-06-24 14:57 260 查看
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)
1:采用递归;2:注意递归结束情况(剪枝)3:每个的树枝介于0到255之间;4:注意如果是0的情况

vector<string> restoreIpAddresses(string s)
{
vector<string> result;
if(s.size() < 4 || s.size() > 12)
return result;
if((s.size() == 12 && s[0] > '2'))
return result;

string value;
restoreIpAddressCore(s, 0, 0, result, value);

return result;
}

void restoreIpAddressCore(string s, int index, int number, vector<string> &result, string& value)
{
if(index == (int)s.size() && number == 4)
{
result.push_back(value);
return;
}

if((int)s.size() - index > 3 * (4 - number) || (int)s.size() - index < (4 - number))
return;

int tempNumber = 0;
for(int i = 0; i < 3; i++)
{
tempNumber = 10 * tempNumber + s[i + index] - '0';

if(tempNumber >= 0 && tempNumber <= 255)
{
for(int j = 0; j <= i; j++)
value.push_back(s[index+j]);
if(number < 3)
value.push_back('.');

restoreIpAddressCore(s, index + i + 1, number + 1, result, value);

if(number < 3)
value.pop_back();
for(int j = 0; j <= i; j++)
value.pop_back();

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