题目描述:
- 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
- 示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
python代码:回溯算法
- 思路:三个点分开的四个数字在 [0,255][0, 255][0,255] 之间,注意 ‘012’ 是无效的数字,以 0 开头的只有 ‘0’ 是有效的。 对每个点的放置设置一些限制,其有三种放法。若已经放置了一个点,下一个点只有 3 种可能:1/2/3个数字之后。每放一个点,都判断一下点分隔出来的数字是否有效。
def restoreIpAddresses2(s):
def isValid(num):
if num[0] != '0':
return int(num) <= 255
else:
return len(num) == 1
def saveRes(lastpos):
segment = s[lastpos+1:]
if isValid(segment):
outs.append(segment)
res.append('.'.join(outs))
outs.pop()
def trackback(cur_pos = -1, dots = 3):
for i in range(cur_pos+1, min(n-1, cur_pos+4)):
segment = s[cur_pos+1:i+1]
if isValid(segment):
outs.append(segment)
if dots - 1 == 0:
saveRes(i)
else:
trackback(i, dots-1)
outs.pop()
n = len(s)
res = []
outs = []
trackback()
return res
if __name__ == "__main__":
s = "25525511135"
print(restoreIpAddresses2(s))