小黑代码
class Solution:
def restoreIpAddresses(self, s: str) -> List[str]:
if len(s) < 4 or len(s) > 12:
return []
# 结果数组与中间变量
results = []
res = []
# 长度
n = len(s)
# 递归函数
def dfs(i = 0):
# 剪枝
if len(res) > 4:
return
# 递归出口
if i == n and len(res) == 4:
results.append('.'.join(res))
return
# 依次枚举
for j in range(i, n):
# 一个字符
if i == j:
res.append(s[i])
dfs(i + 1)
res.pop()
# 多个字符
elif int(s[i:j+1]) <= 255 and s[i] != '0':
res.append(s[i:j+1])
dfs(j+1)
res.pop()
dfs()
return results
回溯法
class Solution:
def restoreIpAddresses(self, s: str) -> List[str]:
# 定义结果数组与中间变量
results = []
res = ['0'] * 4
# 字符串长度
n = len(s)
# 回溯函数
def dfs(p = 0, start = 0):
if start == n:
# 查看是否分成了四段
if p == 4:
results.append('.'.join(res))
return
# 剪枝
if p == 4:
return
# 解决前导零的情况
if s[start] == '0':
res[p] = s[start]
dfs(p + 1, start + 1)
else:
# 枚举非前导零的情况
for i in range(start, n):
# 判断是否合法(前导零与255限制)
if int(s[start:i+1]) <= 255:
res[p] = s[start:i+1]
dfs(p + 1, i + 1)
dfs()
return results
小黑生活
小黑折腾半天发现去医院看个病真难,还需要胸片 血常规,术前4月20日 空腹抽血 中午取结果 提前挂麻醉科
看完病吃了一个麦当劳,去搓澡吐了三次晕倒了,回家发烧38.4