Restore IP AddressesAug
8 '12
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)
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
// Given "25525511135",
// ["255.255.11.135", "255.255.111.35"]
vector<string> res;
string temp;
ipRec(res, temp, s, 0, 0);
return res;
}
private:
void ipRec(vector<string>& res, string& temp, string& s, int level, int index) {
if(level==4) {
if(index==s.length()) {
temp.pop_back();
res.push_back(temp);
}
return;
}
string t;
for(int i=0; i<3; i++) {
t.push_back(s[index+i]);
if(!isValid(t)) continue;
temp.append(t);
temp.push_back('.');
ipRec(res, temp, s, level+1, index+i+1);
temp.pop_back();
}
}
bool isValid(string s) {
if(s.length()<1 || s.length()>3) return false;
if(s.length()==3 && s[2]==0) return false;
if(s.length()==2 && s[1]==0) return false;
int x=atoi(s.c_str());
if( x>=0 && x<=255) return true;
else return false;
}
};
本文介绍了一种通过递归算法将一串数字字符串转化为所有可能的有效IP地址组合的方法。使用C++实现,通过深度优先搜索(DFS)进行回溯,确保每个部分都符合IP地址的有效范围。


被折叠的 条评论
为什么被折叠?



