链接

93. 复原 IP 地址

题目

有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。

例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

示例

示例 1:
输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]

示例 2:
输入:s = "0000"
输出:["0.0.0.0"]

示例 3:
输入:s = "101023"
输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3

说明

  • 1 <= s.length <= 20
  • s 仅由数字组成

思路

本题采用回溯的思路,定义point为当前已经用了的小数点的个数,index为当前遍历的下标,对于每个起始位置进行搜索,符合条件的段后面添加分隔点,直到当point为3时,说明已经全部分好了段,检查最后一段是否在0-255之间,是的话这样的划分符合要求,添加到结果字符串当中。

C++ Code

class Solution {
public:vector<string> res;void backtracking(string s, int index, int point){if(point==3){if(check(s.substr(index))) res.push_back(s);return;}for(int i=index;i<s.size();i++){if(check(s.substr(index,i-index+1))){s.insert(s.begin()+i+1,'.');point++;backtracking(s,i+2,point);point--;s.erase(s.begin() + i + 1);  }else break; }}bool check(string s){if(s.empty() || s.size()>3 ) return false;//cout << "string s is: " << s << endl;if(s[0]=='0'&&s.size()!=1) return false;if(stoi(s)>255) return false;return true;}vector<string> restoreIpAddresses(string s) {if(s.size()>12) return res;backtracking(s,0,0);return res;}
};

注意

substr函数的两种用法:

假设:string s = “1234567”;

  • string sub1 = s.substr(3); //表示从下标3开始一直到结尾:sub1 = “4567”
  • string sub2 = s.substr(2, 3); //表示从下标为2开始截取长度为3的子串:sub2 = “345”

Leetcode-93. 复原 IP 地址相关推荐

  1. LeetCode 93. 复原 IP 地址【字符串,回溯算法】

    93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" ...

  2. LeetCode 93. 复原IP地址(回溯)

    1. 题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&q ...

  3. leetcode 93. 复原IP地址 思考分析

    题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255之间组成,且不能含有前导 0),整数之间用 '.' 分隔. ...

  4. 多看看把,条件太多了--leetcode 93. 复原 IP 地址

    难度:中等 频次:62 题目: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201&quo ...

  5. 142. Leetcode 93. 复原 IP 地址 (回溯算法-切割问题)

    分析剪枝条件: 1.一开始,字符串的长度小于 4 或者大于 12 ,一定不能拼凑出合法的 ip 地址(这一点可以一般化到中间结点的判断中,以产生剪枝行为); 2.每一个结点可以选择截取的方法只有 3 ...

  6. leetcode 93.复原IP地址 dfs解法

    给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", ...

  7. LeetCode 93. 复原IP地址

    思路: 回溯+剪枝 遍历字符串,先计算第一网段,分别取1 2 3位数字,并组合判断是否符合IP规范, 若符合跳至下一网段,并且索引start挪位,temp+本网段值+"." 递归 ...

  8. leetcode:491. 递增子序列、17. 电话号码的字母组合、31. 分割回文串、93. 复原 IP 地址(JavaScript)

    文章目录 491. 递增子序列 分析 去重 如何保证递增呢? 17. 电话号码的字母组合 思路: 单层递归逻辑 递归终止条件 完整代码 另一种写法 31. 分割回文串 思路:分析题目本题可分为两步 9 ...

  9. 93. 复原 IP 地址

    93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" ...

  10. leetcode系列-93.复原 IP 地址

    leetcode系列–第93题.复原 IP 地址 题目描述:有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔.例如:" ...

最新文章

  1. iOS 根据数组中的字典的value值进行排序
  2. 年龄测试计算器软件,抖音很火的年龄计算器
  3. Spring MVC:使用SimpleUrlHandlerMapping的一个简单例子
  4. SQLServer删除登录帐户
  5. mysql导入创建表空间_oracle创建表空间 用户 数据库导入和导出(转)
  6. Oracl数据库中大数据的备份-2
  7. GitBucket管理员添加人员
  8. 专为专业音乐行业从业人员打造的AI智能编曲工具:Orb Producer Suite Mac
  9. pandas如何去掉时间列的小时只保留日期
  10. .NET 安全编程 阅读笔记(四)
  11. iOS之UITableView
  12. 基于51单片机的智能大棚浇花系统设计 花盆浇水灌溉补光散热方案原理图程序
  13. 芯片短缺:今年圣诞节PS5货量恐不足
  14. Facebook注册移动应用以投放应用广告
  15. 苹果手机备忘录内容怎么发送给好友
  16. 计算机软件著作权源码要求,计算机软件著作权登记源代码-20210527121530.docx-原创力文档...
  17. [附源码]java毕业设计学习资源共享与在线学习系统
  18. spring security 3.1中条用js方法登陆后无法回调
  19. c语言不用strcpy复制字符串,c语言程序(二十三)——字符串复制(不使用strcpy()函数)...
  20. 一文理清---TSN时间敏感网络

热门文章

  1. Hadoop是什么?基本概念
  2. 22牛客多校day1 J - Serval and Essay 启发式合并
  3. 图形编程丨图形绘制基础imgui篇—D3D9 HOOK 创建内部Imgui窗口
  4. Python基础入门教学
  5. SCI、EI、ISTP国际三大检索分别指的是什么?
  6. MC(monitorcat) 监控军刀
  7. 区块链教程Fabric1.0源代码分析Ledger(账本)二
  8. 一文看尽 6篇 CVPR2021 伪装目标检测、旋转目标检测论文
  9. 反讽检测(Sarcasm Detection)
  10. 2022软件测试技能 Fiddler HTTP抓包调试工具完整详细教程