【Leetcode】【python】Restore IP Addresses 复原IP地址

题目大意

来自:
https://shenjie1993.gitbooks.io/leetcode-python/093%20Restore%20IP%20Addresses.html
找出一个由纯数字组成的序列能够构成的不同的IP地址。

注意点:
每个IP段的范围是0-255
要用整个序列,而不是它的子集
例子:
输入: s = “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]

解题思路

回溯法DFS

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution(object):
def restoreIpAddresses(self, s):
"""
:type s: str
:rtype: List[str]
"""
result = []
self._restoreIpAddresses(0, s, [], result)
return result

def _restoreIpAddresses(self, length, s, ips, result):
if not s:
if length == 4:
result.append('.'.join(ips)) # 以.分隔作为字符串返回
return
if length == 4: # 分了4段,结束
return

# 取一位
self._restoreIpAddresses(length + 1, s[1:], ips + [s[:1]], result)

# 若要取2位及以上,要确保目前的第一位不能为0
if s[0] != '0':
if len(s) >= 2:
self._restoreIpAddresses(length + 1, s[2:], ips + [s[:2]], result)
if len(s) >= 3 and int(s[:3]) <= 255: # 若要取3位,则要保证小于255
self._restoreIpAddresses(length + 1, s[3:], ips + [s[:3]], result)

总结