LeetCode:93. Restore IP Addresses - Python

189 篇文章 3 订阅
151 篇文章 2 订阅

问题描述:

93. 复原IP地址

给定一个只包含数字的字符串,复原它并返回所有可能的 IP地址格式。

示例:

输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]

问题分析:

(1)IP 一共有4段,每一段范围 0~255.
(2)可以使用递归的方法(回溯法)解决,对整个字符串每次处理一段,然后递归处理剩下的段。
(3)每一段的范围是0~255,在处理每一段的时候,又要考虑3种情况,分别是1位2位3位的情况。
(4)注意一点,每一段不能出现01001这种情况。
(5)最后就判断递归的出口。

Python3实现:

class Solution:
    def restoreIpAddresses(self, s):

        def dfs(s, start, k, result, results):  # result保存临时的数据,  results保存最后的结果
            if k == 4:  # 递归出口
                if start == len(s):  # 恰巧分完
                    results.append('.'.join(result))
                else:
                    return

            for i in range(1, 4):  # 其中每一段只有 1 - 3 位
                if start + i > len(s):  # 已经出界,说明本次分隔不成立,结束
                    break

                if i > 1 and s[start] == '0':  # 很显然,不能出现 01, 001, 这样的
                    continue

                if i != 3 or int(s[start:start + i]) < 256:  # 递归进入剩下的 段
                    dfs(s, start + i, k + 1, result + [s[start:start + i]], results)
            return

        res = []
        dfs(s, 0, 0, [], res)

        return res


if __name__ == '__main__':
    solu = Solution()
    s = '25525511135'
    print(solu.restoreIpAddresses(s))

声明: 总结学习,有问题可以批评指正,大神可以略过哦。
参考链接:leetcode.com/problems/restore-ip-addresses/discuss/128073/Python-Backtracking

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值