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
return
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;
}
}
}
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;
}
}
}
相关文章推荐
- Restore IP Addresses——边界条件判定
- LeetCode 93 Restore IP Addresses
- 【leetcode】String——Restore IP Addresses (93)
- LeetCode Online Judge 题目C# 练习 - Restore IP Addresses
- LeetCode-93.Restore IP Addresses
- LeetCode: Restore IP Addresses
- [LeetCode][Java] Restore IP Addresses
- Restore IP Addresses
- Restore IP Addresses 还原IP地址@LeetCode
- Restore IP Addresses
- Restore IP Addresses - LeetCode
- LeetCode Restore IP Addresses(回溯法)
- Restore IP Addresses
- leetcode93. Restore IP Addresses
- Restore IP Addresses
- LeetCode93——Restore IP Addresses
- leetcode — restore-ip-addresses
- Restore IP Addresses
- leetcode--Restore IP Addresses
- Leetcode Restore IP Addresses