[Leetcode][python]Restore IP Addresses/复原IP地址

题目大意

来自:
https://shenjie1993.gitbooks.io/leetcode-python/093%20Restore%20IP%20Addresses.html
找出一个由纯数字组成的序列能够构成的不同的IP地址。
注意点:
每个IP段的范围是0-255
要用整个序列,而不是它的子集
例子:
输入: s = “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]

解题思路

回溯法DFS

代码

class Solution(object):
    def restoreIpAddresses(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        result = []
        self._restoreIpAddresses(0, s, [], result)
        return result

    def _restoreIpAddresses(self, length, s, ips, result):
        if not s:
            if length == 4:
                result.append('.'.join(ips))  # 以.分隔作为字符串返回
            return
        if length == 4:  # 分了4段,结束
            return

        # 取一位
        self._restoreIpAddresses(length + 1, s[1:], ips + [s[:1]], result)

        # 若要取2位及以上,要确保目前的第一位不能为0
        if s[0] != '0':  
            if len(s) >= 2:
                self._restoreIpAddresses(length + 1, s[2:], ips + [s[:2]], result)
            if len(s) >= 3 and int(s[:3]) <= 255: # 若要取3位,则要保证小于255
                self._restoreIpAddresses(length + 1, s[3:], ips + [s[:3]], result)

总结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值