ip地址问题

给定一个只包含数字的字符串,通过返回所有可能的有效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))
测试用例:在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42620513/article/details/123685791