Restore IP Addresses
2014-04-16 15:24
239 查看
题目:
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given
return
算法思想:
这道题考察的是回溯算法(backtracing),一个合法的ip地址包含4个小于等于255的整数,回溯算法的过程是:先找到第一个,再找第二个,再找第三个,当第四个不满足条件时,重新找第三个...当所有情况都被找完时,结束。
回溯算法本质上是一个树的前序遍历,所以有两个写法:
1.递归算法:因为是树,所以递归最简单,也最容易理解。
2.迭代算法:这个稍微麻烦些,考虑的边界条件也较多,但效率最高。
void helper(string segment, int level, string temp, vector &result)
{
if (segment.size() == 0)
return;
if (level < 4)
{
for (int i = 0; i < 3; i++)
{
if (i+1 >= segment.size() || stoi(segment.substr(0, i+1)) > 255)
return;
helper(segment.substr(i+1, segment.size()-i-1), level+1, temp+segment.substr(0, i+1)+'.', result);
if (segment[0] == '0')
return;
}
}
else
{
if (segment[0] == '0' && segment.size() > 1)
return;
if (segment.size() > 3 || stoi(segment) > 255)
return;
temp += segment;
result.push_back(temp);
}
}
vector restoreIpAddresses(string s)
{
vector res;
helper(s, 1, "", res);
return res;
}
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)
算法思想:
这道题考察的是回溯算法(backtracing),一个合法的ip地址包含4个小于等于255的整数,回溯算法的过程是:先找到第一个,再找第二个,再找第三个,当第四个不满足条件时,重新找第三个...当所有情况都被找完时,结束。
回溯算法本质上是一个树的前序遍历,所以有两个写法:
1.递归算法:因为是树,所以递归最简单,也最容易理解。
2.迭代算法:这个稍微麻烦些,考虑的边界条件也较多,但效率最高。
void helper(string segment, int level, string temp, vector &result)
{
if (segment.size() == 0)
return;
if (level < 4)
{
for (int i = 0; i < 3; i++)
{
if (i+1 >= segment.size() || stoi(segment.substr(0, i+1)) > 255)
return;
helper(segment.substr(i+1, segment.size()-i-1), level+1, temp+segment.substr(0, i+1)+'.', result);
if (segment[0] == '0')
return;
}
}
else
{
if (segment[0] == '0' && segment.size() > 1)
return;
if (segment.size() > 3 || stoi(segment) > 255)
return;
temp += segment;
result.push_back(temp);
}
}
vector restoreIpAddresses(string s)
{
vector res;
helper(s, 1, "", res);
return res;
}
vector restoreIpAddresses(string s) { vector res; stringstream ss; list plist; if (s.length() < 4) return res; plist.push_back(0); while (true) { while (plist.size() < 5) plist.push_back(plist.back()+1); ss.str(""); if(plist.back() == s.length()) { list::iterator listiter = plist.begin(); listiter++; for (int i = 0; i < s.length(); i++) { ss << s[i]; if (i != s.length()-1 && i+1 == *listiter) { ss << '.'; listiter++; } } res.push_back(ss.str()); } int k; while (plist.size() != 1) { k = plist.back(); plist.pop_back(); if (k-plist.back() < 3 && k+5-plist.size() <= s.length() && s[plist.back()] != '0' && stoi(s.substr(plist.back(), k-plist.back()+1)) <= 255) { plist.push_back(k+1); break; } } if (plist.size() == 1) return res; } }
相关文章推荐
- [LeetCode] Restore IP Addresses
- LeetCode Online Judge 题目C# 练习 - Restore IP Addresses
- LEETCODE: Restore IP Addresses
- [Leetcode] Restore IP Addresses
- Restore IP Addresses -- leetcode
- Restore IP Addresses(leetcode)
- LeetCode OJ-- Restore IP Addresses
- [leetcode] Restore IP Addresses
- leetcode: Restore IP Addresses
- LeetCode-93.Restore IP Addresses
- DFS-lintcode恢复ip地址(Restore IP Addresses)
- LeetCode - Restore IP Addresses
- 93. Restore IP Addresses
- leetcode JAVA Restore IP Addresses 难度系数3 3.33
- LeetCode | Restore IP Addresses
- [leetcode 93] Restore IP Addresses
- Restore IP Addresses
- leetcode做题总结,题目Restore IP Addresses 93
- [LeetCode]Restore IP Addresses
- leetcode: Restore IP Addresses