欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > LeetCode93:复原IP地址

LeetCode93:复原IP地址

2025/5/16 4:22:19 来源:https://blog.csdn.net/Ricky_youngone/article/details/143885291  浏览:    关键词:LeetCode93:复原IP地址

题目链接:93. 复原 IP 地址 - 力扣(LeetCode)

代码如下:

class Solution {
private:vector<string> result;void backtracking(string& s, int startIndex, int pointsum){if(pointsum == 3){if(isvaild(s, startIndex, s.size() - 1)){result.push_back(s);}}for(int i = startIndex; i < s.size(); i++){if(isvaild(s, startIndex, i)){s.insert(s.begin() + i + 1, '.');pointsum++;backtracking(s, i + 2, pointsum);pointsum--;s.erase(s.begin() + i + 1);}else    break;}}bool isvaild(const string& s, int start, int end){if(start > end){return false;}if(s[start] == '0' && start != end){return false;}int num = 0;for(int i = start; i <= end; i++){if(s[i] > '9' || s[i] < '0'){return false;}num = num * 10 + (s[i] - '0');if(num > 255){return false;}}return true;}
public:vector<string> restoreIpAddresses(string s) {result.clear();if(s.size() < 4 || s.size() > 12)   return result;backtracking(s, 0, 0);return result;}
};

这个题目仍然是用的回溯算法,首先就需要抽象成一棵树,我们发现这个树,其实也就是分割字符串的类型题。

回溯三部曲:

参数的设定:需要s这个字符串,分割位置startindex,小数点的数量pointsum

结束条件:当pointsum等于3个的时候,那么我们就可以停止了。这个时候我们在去判断一下这个整体的ip地址,看看是否符合条件。

单层循环:如果当前分割到i的话符合条件,那么就插入一个'.',因为ip地址有三个'.'嘛所以就当到达那个位置的时候,就加上一个点就行。

最后还需要编写一个判断这个值是否为正确值,ip的一个网段范围是0-255

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com