分析剪枝条件:

1、一开始,字符串的长度小于 4 或者大于 12 ,一定不能拼凑出合法的 ip 地址(这一点可以一般化到中间结点的判断中,以产生剪枝行为);

2、每一个结点可以选择截取的方法只有 3 种:截 1 位、截 2 位、截 3 位,因此每一个结 点可以生长出的分支最多只有 3 条分支;

根据截取出来的字符串判断是否是合理的 ip 段,这里写法比较多,可以先截取,再转换成 int ,再判断。我采用的做法是先转成 int,是合法的 ip 段数值以后,再截取。

3、由于 ip 段最多就 4 个段,因此这棵三叉树最多 4 层,这个条件作为递归终止条件之一; 4、每一个结点表示了求解这个问题的不同阶段

class Solution:def restoreIpAddresses(self, s: str) -> List[str]:size = len(s)if size < 4 or size > 12: return []path, res = [], []self.dfs(s, size, 0, 0, path, res)return resdef dfs(self, s, size, split_times, begin, path, res):if begin == size:if split_times == 4:res.append(".".join(path))returnif size - begin < (4 - split_times) or size - begin > 3*(4-split_times):returnfor i in range(3):if begin + i >= size:breakip_segment = self.judge_if_ip_segment(s, begin, begin+i)if ip_segment != -1:path.append(str(ip_segment))self.dfs(s, size, split_times + 1, begin + i + 1, path, res)path.pop()def judge_if_ip_segment(self, s, left, right):size = right - left + 1if size > 1 and s[left] == '0':return -1res = int(s[left:right + 1])if res > 255:return -1return res

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

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

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

  2. java实现复原IP地址,回溯算法:复原IP地址

    93.复原IP地址 题目地址:https://leetcode-cn.com/problems/restore-ip-addresses/ 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地 ...

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

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

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

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

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

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

  6. LeetCode 93. 复原IP地址

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

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

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

  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" ...

最新文章

  1. Redis数据过期策略详解
  2. pycharm2019.2一个奇怪的bugger,执行后输出内容被莫名处理
  3. 微信如何解绑小程序_微信小程序该如何运营推广
  4. Echarts后台option对象
  5. 宝马计算机考试答案,宝马BMW旅程电脑功能键的说明与测试程序
  6. MIC检测方式(六)
  7. Hadoop工作流--JobControl(五)
  8. Spring-BeanPostProcessor的执行顺序
  9. 【python】10行代码下载B站弹幕
  10. matlab3db带宽,[转]db,dbm,-3db带宽的定义
  11. python复利计算_用Python计算基金定投收益代码
  12. win10笔记本插上耳机没声音设置
  13. Excel忽略0值求平均分,将某一列分类后求平均值
  14. Jqurey总结归纳
  15. github语法使用
  16. MTK android 常用修改点
  17. Spring Boot 自动加载指定包下的拦截器
  18. KAWA-STAR股票图形分析小工具
  19. 学校计算机竞赛方案,小学生电脑制作比赛活动方案
  20. 《守望先锋》模型提取之Blender中查看模型(二)

热门文章

  1. C++使用GDI+实现图片格式转换
  2. 去除字符串中的html标记及标记中的内容
  3. getcwd()和dirname(__FILE__)的区别
  4. Sqlserver 如何获取每组中的第一条记录
  5. 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)
  6. Linux 内核定时器使用 二 高精度定时器 hrtimer 的用例
  7. 一个小而美的博客——前端——index
  8. java类加载器_类加载器ClassLoader
  9. python网站开发linux_使用Python编写Linux系统守护进程实例
  10. cmpp3.0协议 java,JAVA CMPP3.0协议实现