题目大意
来自:
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
代码
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)