lintcode:恢复IP地址

题目

class Solution:
    # @param {string} s the IP string
    # @return {string[]} All possible valid IP addresses

    def restoreIpAddresses(self, s):
        # Write your code here
        self.ret = []
        self.dfs([], s, 0, len(s), 0)
        return self.ret

    def dfs(self, ip, s, start, end, part):
        if (start == len(s)) and (part == 4):
            self.ret.append('.'.join(ip))
        elif (start < len(s)) and (part < 4):
            for i in xrange(3):
                if (start + i) < end:
                    n = self.int2str(s, start, start + i + 1)
                    if (n >= 0) and (n <= 255):
                        if (n == 0) and (i > 0):    # 0只能出现1次
                            continue
                        if (n > 0) and (s[start] == '0'):   # 大于0的元素不能0开头
                            continue
                        ip.append(str(n))
                        self.dfs(ip, s, start + i + 1, end, part + 1)
                        ip.pop()

    def int2str(self, s, start, end):
        ret = int(s[start])
        for i in xrange(start + 1, end):
            ret = ret * 10 + int(s[i])
        return ret



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值