问题描述:
给定一个只包含数字的字符串,复原它并返回所有可能的
IP
地址格式。
示例:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]
问题分析:
(1)IP
一共有4段,每一段范围 0~255
.
(2)可以使用递归的方法(回溯法)解决,对整个字符串每次处理一段,然后递归处理剩下的段。
(3)每一段的范围是0~255
,在处理每一段的时候,又要考虑3种情况,分别是1位
、2位
、3位
的情况。
(4)注意一点,每一段不能出现01
、001
这种情况。
(5)最后就判断递归的出口。
Python3实现:
class Solution:
def restoreIpAddresses(self, s):
def dfs(s, start, k, result, results): # result保存临时的数据, results保存最后的结果
if k == 4: # 递归出口
if start == len(s): # 恰巧分完
results.append('.'.join(result))
else:
return
for i in range(1, 4): # 其中每一段只有 1 - 3 位
if start + i > len(s): # 已经出界,说明本次分隔不成立,结束
break
if i > 1 and s[start] == '0': # 很显然,不能出现 01, 001, 这样的
continue
if i != 3 or int(s[start:start + i]) < 256: # 递归进入剩下的 段
dfs(s, start + i, k + 1, result + [s[start:start + i]], results)
return
res = []
dfs(s, 0, 0, [], res)
return res
if __name__ == '__main__':
solu = Solution()
s = '25525511135'
print(solu.restoreIpAddresses(s))
声明: 总结学习,有问题可以批评指正,大神可以略过哦。
参考链接:leetcode.com/problems/restore-ip-addresses/discuss/128073/Python-Backtracking