数字字符串转化成IP地址, 回溯
相当于是找满足IP要求的数字字符组排列,最容易想到的就是用回溯
基本要素1,终止条件:如果遍历到字符串末尾或者找出的字段数已经超过4
基本要素2:元素选择:在某一个位置,可以选一个数作为IP地址的一个字段,也可以选两个数作为IP地址的一个字段,但第一位数不能是0,还可以选三个数作为IP地址的一个字段,但第一位数不能是0,且三位数不大于255。
基本要素3:递推关系,如果当前字段选了一个数s[idx],那下一个字段就从s[idx+1]开始选,形成子问题。如果当前字段选了两个数s[idx:idx+2],那下一个字段就从s[idx+2]开始选,形成子问题。如果当前字段选了三个数s[idx:idx+3],那下一个字段就从s[idx+3]开始选,形成子问题。
class Solution:
def restoreIpAddresses(self , s: str) -> List[str]:
path = []
res = []
def backTracking(s, idx):
if len(path)>4 or idx >= len(s):
if len(path) == 4:
res.append('.'.join(path[:]))
return
# 一位数
path.append(s[idx])
backTracking(s, idx+1)
#两位数,首位不能为零
if idx+1 < len(s) and s[idx]!='0':
path[-1] = path[-1]+s[idx+1]
backTracking(s, idx+2)
# 三位数
if idx+2 < len(s) and 0< int(s[idx:idx+3])<=255:
path[-1] = path[-1]+s[idx+2]
backTracking(s, idx+3)
path.pop()
backTracking(s, 0)
return res
京公网安备 11010502036488号