Restore IP Addresses
2015-04-13 05:29
225 查看
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given
return
这种扫描combination的挺多的,一般都是backtracking, 那么要考虑的:
1. 符合条件的解: 对于单个数字, 0-255之间,且 010为无效。 对于整个解,有四个数字构成且无剩余数字
2. 停止条件: 达到1 之后满足
3. 回溯: 这里我定式思维了一下。。。从index+1继续回溯,其实是i+1..., 总之还是push, 回溯, pop来做。。。。
<span style="color:#333333;">class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> res;
vector<string> solution;
scanIp(s,0,res,solution);
return res;
}
private:
bool isValid(const string& s){
int n=s.size();
</span><span style="color:#ff0000;"> if (n==0 || n>3)
return false;
if (s[0]=='0' && n>1)
return false;
if (n==3 && atoi(s.c_str())>255)
return false;</span><span style="color:#333333;">
return true;
}
void scanIp(const string& s, int index, vector<string>& res, vector<string>& solution){
if (solution.size()==4){ // stopping condition, have 4 numbers
</span><span style="color:#ff0000;">if (index==s.size())</span><span style="color:#333333;">{ // there is not left numbers, otherwise, invalid
string tmp=solution[0];
for (int i=1; i<4; i++)
tmp=tmp+"."+solution[i];
res.push_back(tmp);
}
return;
}
string num;
for (int i=index; i<s.size()&& i<index+3; i++){
num.push_back(s[i]);
if (isValid(num)){
solution.push_back(num);
scanIp(s,</span><span style="color:#ff0000;">i+1</span><span style="color:#333333;">, res, solution);
solution.pop_back();
}
}
}
};
</span>
For example:
Given
"25525511135",
return
["255.255.11.135", "255.255.111.35"]. (Order does not matter)
这种扫描combination的挺多的,一般都是backtracking, 那么要考虑的:
1. 符合条件的解: 对于单个数字, 0-255之间,且 010为无效。 对于整个解,有四个数字构成且无剩余数字
2. 停止条件: 达到1 之后满足
3. 回溯: 这里我定式思维了一下。。。从index+1继续回溯,其实是i+1..., 总之还是push, 回溯, pop来做。。。。
<span style="color:#333333;">class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> res;
vector<string> solution;
scanIp(s,0,res,solution);
return res;
}
private:
bool isValid(const string& s){
int n=s.size();
</span><span style="color:#ff0000;"> if (n==0 || n>3)
return false;
if (s[0]=='0' && n>1)
return false;
if (n==3 && atoi(s.c_str())>255)
return false;</span><span style="color:#333333;">
return true;
}
void scanIp(const string& s, int index, vector<string>& res, vector<string>& solution){
if (solution.size()==4){ // stopping condition, have 4 numbers
</span><span style="color:#ff0000;">if (index==s.size())</span><span style="color:#333333;">{ // there is not left numbers, otherwise, invalid
string tmp=solution[0];
for (int i=1; i<4; i++)
tmp=tmp+"."+solution[i];
res.push_back(tmp);
}
return;
}
string num;
for (int i=index; i<s.size()&& i<index+3; i++){
num.push_back(s[i]);
if (isValid(num)){
solution.push_back(num);
scanIp(s,</span><span style="color:#ff0000;">i+1</span><span style="color:#333333;">, res, solution);
solution.pop_back();
}
}
}
};
</span>
相关文章推荐
- Restore IP Addresses -- LeetCode
- LeetCode 093 Restore IP Addresses
- LeetCode: Restore IP Addresses
- [LeetCode][Java] Restore IP Addresses
- LeetCode OJ - Restore IP Addresses
- [Leetcode] Restore IP Addresses
- Restore IP Addresses(DFS的巅峰)
- LeetCode Restore IP Addresses
- Leetcode: Restore IP Addresses
- LeetCode 093 Restore IP Addresses
- Leetcode--Restore IP Addresses
- [LeetCode] Restore IP Addresses
- Restore IP Addresses
- 【Lintcode】Restore IP Addresses, Number of Airplanes in the Sky
- LeetCode:Restore IP Addresses
- 113_Restore IP Addresses
- [leetcode]Restore IP Addresses
- leetcode第一刷_Restore IP Addresses
- LeetCode解题报告—— Reverse Linked List II & Restore IP Addresses & Unique Binary Search Trees II
- LeetCode *** 93. Restore IP Addresses