题目
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.'
分隔。
示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
方案(回溯)
class Solution:
def restoreIpAddresses(self, s: str) -> List[str]:
if len(s) <= 3:
return []
# 回溯
# 我们现在有4个 . 每个数字后可以选择放或者不放,然后放完之后判断是否合法即可
# 注: "0.0.0.0" 合法, 但是 "0.00.1.0" 不合法
ret = []
def helper(index, count, prefix):
'''
index: 当前处理到 s 的 index
count: 已放置 . 的个数
prefix: 已经放置的结果, eg. prefix = "255.255.11."
'''
if index >= len(s):
return
if count == 3:
if s[index] == "0" and len(s) - index > 1: # 结尾为 0x, 0xx
return
if int(s[index:]) > 255:
return
ret.append(prefix + s[index:])
count += 1
if s[index] == "0":
return helper(index+1, count, prefix+s[index:index+1]+".")
if len(s) - index >= 1:
helper(index+1, count, prefix+s[index:index+1]+".")
if len(s) - index >= 2:
helper(index+2, count, prefix+s[index:index+2]+".")
if len(s) - index >= 3 and int(s[index:index+3]) <= 255:
helper(index+3, count, prefix+s[index:index+3]+".")
helper(0, 0, "")
return ret
原文
https://leetcode-cn.com/explore/interview/card/2020-top-interview-questions/292/simulation/1309/