【LeetCode 93】复原IP地址

本文介绍了一种使用回溯算法解决复原IP地址问题的方法。通过递归地将字符串分割成四段,每段检查是否符合IP地址的有效性,最终得到所有可能的IP地址格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:
  • 给定一个只包含数字的字符串,复原它并返回所有可能的 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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值