【LeetCode with Python】 Restore IP Addresses
来源:互联网 发布:久其软件财务报表 编辑:程序博客网 时间:2024/06/05 00:25
原题页面:https://oj.leetcode.com/problems/restore-ip-addresses/
题目类型:递归回溯,剪枝
难度评价:★★★★
本文地址:http://blog.csdn.net/nerv3x3/article/details/31068775
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given "25525511135"
,
return ["255.255.11.135", "255.255.111.35"]
. (Order does not matter)
搜索,递归,剪枝。
注意剪枝条件:1.每个域的数值不能大于255;2.有且刚好4个域;3.一个域的长度>=2时,不能以0开头。因此逻辑结构如下:
1、如果当前考察字符不是最后一个字符
1.1、如果当前字符附加到当前已有数据域(num)后面,数据域新值不大于255时
1.1.1、如果当前出现的小数点数目(fields)小于3,则可以考虑直接在已有前缀(prefix)后面加一个小数点,然后以当前字符开头,开始新的数据域
1.1.2、如果当前已有数据域不是0,则可以考虑将本字符直接附加到当前已有数据域
1.2、否则,就看当前小数点数目是不是小于3,小于就可以考虑直接在已有前缀(prefix)后面加一个小数点,然后以当前字符开头,开始新的数据域
1.3、否则则本分支失败
2、如果当前考察字符是最后一个字符
2.1、如果当前已有有三个小数点,当前数据域不是0,并且将当前字符附加到当前数据域后面,数据域新值也不会大于255时,可以考虑这样做
2.2、否则如果当前已有两个小数点,则用小数点结束当前数据域,然后以当前字符作为最后一个数据域从而构成一个解
2.3、否则当前分支失败
另外,这道题也许用有穷自动机DFA来尝试作答?
class Solution: def doRestoreIpAddresses(self, prefix, num, s, start, fields): if start == len(s) - 1: results1 = [ ] results2 = [ ] if int(num + s[start]) <= 255 and 3 == fields and '0' != num: results1 = [prefix + s[start]] elif 2 == fields: results2 = [prefix + '.' + s[start]] return results1 + results2 if int(num + s[start]) <= 255: results0 = [ ] results1 = [ ] if fields < 3: results0 = self.doRestoreIpAddresses(prefix + '.' + s[start], s[start], s, start + 1, fields + 1) if '0' != num: results1 = self.doRestoreIpAddresses(prefix + s[start], num + s[start], s, start + 1, fields) return results0 + results1 elif fields < 3: results0 = self.doRestoreIpAddresses(prefix + '.' + s[start], s[start], s, start + 1, fields + 1) return results0 else: return [ ] # @param s, a string # @return a list of strings def restoreIpAddresses(self, s): if len(s) < 4: return [ ] return self.doRestoreIpAddresses(s[0], s[0], s, 1, 0)
- 【LeetCode with Python】 Restore IP Addresses
- [Leetcode][python]Restore IP Addresses
- LeetCode: Restore IP Addresses
- LeetCode : Restore IP Addresses
- [LeetCode] Restore IP Addresses
- [LeetCode]Restore IP Addresses
- LeetCode:Restore IP Addresses
- LeetCode Restore IP Addresses
- [leetcode] Restore IP Addresses
- LeetCode:Restore IP Addresses
- [LeetCode] Restore IP Addresses
- LeetCode - Restore IP Addresses
- LeetCode | Restore IP Addresses
- 【leetcode】Restore IP Addresses
- Leetcode: Restore IP Addresses
- leetcode Restore IP Addresses
- leetcode Restore IP Addresses
- [LeetCode] Restore IP Addresses
- Lucene41PostingWriter源码分析
- 进程间通信 —— 命名管道
- 拷贝构造函数的必要性
- TextView折叠
- char、varchar、nchar、nvarchar特点比较
- 【LeetCode with Python】 Restore IP Addresses
- requirejs进阶(二)
- 初探PowerShell OneGet(二)
- android的异步消息处理机制
- DevExpress VCL for Delphi 各版本收集下载(最新支持Delphi XE 5)
- 如何成为一个游戏制作人——第5.5章一个小游戏的框架
- ps快捷键
- 获得MFC窗口其它类指针的方法
- [Mac] Mac book pro换SSD硬盘、制作启动U盘、TimeMachine恢复 小记