142. Leetcode 93. 复原 IP 地址 (回溯算法-切割问题)
分析剪枝条件:
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 地址 (回溯算法-切割问题)相关推荐
- LeetCode 93. 复原 IP 地址【字符串,回溯算法】
93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" ...
- java实现复原IP地址,回溯算法:复原IP地址
93.复原IP地址 题目地址:https://leetcode-cn.com/problems/restore-ip-addresses/ 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地 ...
- LeetCode 93. 复原IP地址(回溯)
1. 题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&q ...
- leetcode 93. 复原IP地址 思考分析
题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255之间组成,且不能含有前导 0),整数之间用 '.' 分隔. ...
- 多看看把,条件太多了--leetcode 93. 复原 IP 地址
难度:中等 频次:62 题目: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201&quo ...
- LeetCode 93. 复原IP地址
思路: 回溯+剪枝 遍历字符串,先计算第一网段,分别取1 2 3位数字,并组合判断是否符合IP规范, 若符合跳至下一网段,并且索引start挪位,temp+本网段值+"." 递归 ...
- leetcode 93.复原IP地址 dfs解法
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", ...
- leetcode:491. 递增子序列、17. 电话号码的字母组合、31. 分割回文串、93. 复原 IP 地址(JavaScript)
文章目录 491. 递增子序列 分析 去重 如何保证递增呢? 17. 电话号码的字母组合 思路: 单层递归逻辑 递归终止条件 完整代码 另一种写法 31. 分割回文串 思路:分析题目本题可分为两步 9 ...
- 93. 复原 IP 地址
93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" ...
最新文章
- Redis数据过期策略详解
- pycharm2019.2一个奇怪的bugger,执行后输出内容被莫名处理
- 微信如何解绑小程序_微信小程序该如何运营推广
- Echarts后台option对象
- 宝马计算机考试答案,宝马BMW旅程电脑功能键的说明与测试程序
- MIC检测方式(六)
- Hadoop工作流--JobControl(五)
- Spring-BeanPostProcessor的执行顺序
- 【python】10行代码下载B站弹幕
- matlab3db带宽,[转]db,dbm,-3db带宽的定义
- python复利计算_用Python计算基金定投收益代码
- win10笔记本插上耳机没声音设置
- Excel忽略0值求平均分,将某一列分类后求平均值
- Jqurey总结归纳
- github语法使用
- MTK android 常用修改点
- Spring Boot 自动加载指定包下的拦截器
- KAWA-STAR股票图形分析小工具
- 学校计算机竞赛方案,小学生电脑制作比赛活动方案
- 《守望先锋》模型提取之Blender中查看模型(二)
热门文章
- C++使用GDI+实现图片格式转换
- 去除字符串中的html标记及标记中的内容
- getcwd()和dirname(__FILE__)的区别
- Sqlserver 如何获取每组中的第一条记录
- 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)
- Linux 内核定时器使用 二 高精度定时器 hrtimer 的用例
- 一个小而美的博客——前端——index
- java类加载器_类加载器ClassLoader
- python网站开发linux_使用Python编写Linux系统守护进程实例
- cmpp3.0协议 java,JAVA CMPP3.0协议实现