class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> result;
restoreSegments(result,"",0,s);
return result;
}
void restoreSegments(vector<string>& result,string tempstring,int k,string s){
if(k==4 && s.size()<=0){
result.push_back(tempstring.substr(0,tempstring.size()-1));
return ;
}
if(k>4 || s.size()<=0){
return ;
}
if(s.substr(0,1)=="0"){
tempstring += "0.";
restoreSegments(result,tempstring,k+1,s.substr(1));
}else{
if(s.size()>=3 && s.substr(0,3)<="255"){
restoreSegments(result,tempstring + s.substr(0,3) + ".",k+1,s.substr(3));
}
if(s.size()>=2){
restoreSegments(result,tempstring + s.substr(0,2) + ".",k+1,s.substr(2));
}
restoreSegments(result,tempstring + s.substr(0,1) + ".",k+1,s.substr(1));
}
}
};
public:
vector<string> restoreIpAddresses(string s) {
vector<string> result;
restoreSegments(result,"",0,s);
return result;
}
void restoreSegments(vector<string>& result,string tempstring,int k,string s){
if(k==4 && s.size()<=0){
result.push_back(tempstring.substr(0,tempstring.size()-1));
return ;
}
if(k>4 || s.size()<=0){
return ;
}
if(s.substr(0,1)=="0"){
tempstring += "0.";
restoreSegments(result,tempstring,k+1,s.substr(1));
}else{
if(s.size()>=3 && s.substr(0,3)<="255"){
restoreSegments(result,tempstring + s.substr(0,3) + ".",k+1,s.substr(3));
}
if(s.size()>=2){
restoreSegments(result,tempstring + s.substr(0,2) + ".",k+1,s.substr(2));
}
restoreSegments(result,tempstring + s.substr(0,1) + ".",k+1,s.substr(1));
}
}
};
本文介绍了一个用于恢复IP地址的有效递归算法。该算法通过递归地尝试将字符串分割成合法的IP段,并验证每一段是否符合IPv4地址的标准。文章详细展示了如何处理以0开头的情况及如何避免超出有效范围(0-255)。此算法适用于解决LeetCode等在线编程挑战中有关IP地址格式化的问题。
1522

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



