给定一个只包含数字的字符串,通过返回所有可能的有效IP地址组合来恢复它。例如:给定“25525511135”,返回[“255.255.11.135”,“255.255.111.35”]。
解题思路:
1、每段地址均小于等于255; 2、共有四段地址
递归方法:取某段的地址,可能是1位、2位、3位
判断第一段地址是否有效,若有效,取下一段地址
将某段地址与下一段地址按输出格式连接起来
from typing import List
def restoreIpAddresses(s: str) -> List[str]:
n = len(s)
if n < 4 or n > 12:
return []
ret = []
def dfs(cur, ips):
# 如果递归结束,并且ips当中刚好存了4个ip
# 则生成答案
if cur >= n:
if len(ips) == 4:
ret.append('.'.join(ips[:]))
return
# 遍历下一个ip是几位
for i in range(cur, min(cur + 3, n)):
# 如果超过1位但是第一位是0,那么非法
if s[cur] == '0' and i > cur:
return
# ip必须小于等于255
num = int(s[cur: i + 1])
if num > 255:
return
# 回溯
ips.append(s[cur: i + 1])
dfs(i + 1, ips)
ips.pop()
dfs(0, [])
return ret
#进行测试
print(“请输入ip地址字符串”)
s=input()
print(restoreIpAddresses(s))
测试用例: