【LeetCode】728. Self Dividing Numbers

Python版本:Python3.6.2

728. Self Dividing Numbers

A self-dividing number is a number that is divisible by every digit it contains.
For example, 128 is a self-dividing number because 128 % 1 == 0, 128 % 2 == 0, and 128 % 8 == 0.
Also, a self-dividing number is not allowed to contain the digit zero.
Given a lower and upper number bound, output a list of every possible self dividing number, including the bounds if possible.
Example 1:
Input:
left = 1, right = 22
Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]
Note:
The boundaries of each input argument are 1 <= left <= right <= 10000.

感觉自己写的很复杂,但是submit之后速度竟然不是最慢的,先贴代码记录下,有空想想简单的方法,感觉可以用迭代的思想。
(\是换行符)
class Solution:
    def selfDividingNumbers(self, left, right):
        """
        :type left: int
        :type right: int
        :rtype: List[int]
        """
        res = []
        while 1 <= left <= right <= 10000:
            if 1 <= left <= 9:
                res.append(left)
            if 10 <= left <= 99:
                if int(left / 10) != 0 and left % 10 != 0 and left % (int(left / 10)) == 0 and left % (left % 10) == 0:
                    res.append(left)
            if 100 <= left <= 999:
                if int(left / 100) != 0 and int(left / 10) % 10 != 0 and left % 10 != 0 and left % int((left / 100)) == \
                        0 and left % (int(left / 10) % 10) == 0 and left % (left % 10) == 0:
                    res.append(left)
            if 1000 <= left <= 9999:
                if int(left / 1000) != 0 and int(left / 100) % 10 != 0 and int(left / 10) % 10 != 0 \
                        and left % 10 != 0 and left % (int(left / 1000)) == 0 and left % (int(left / 100) % 10) == 0\
                        and left % (int(left / 10) % 10) == 0 and left % (left % 10) == 0:
                    res.append(left)
            left += 1
        return res
检验下:
a = Solution()
print(a.selfDividingNumbers(left=1, right=22))

看了大神的代码,那简直优美!1行!瞻仰下:
return [num for num in range(left, right+1) if all((int(d) and not num % int(d)) for d in str(num))]
这个结构num for num in range(a,b)碰到很多次,但一直不会用,下次要尝试用一用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值