【leetcode】728. Self Dividing Numbers

40.33%

class Solution(object):
    def selfDividingNumbers(self, left, right):
        """
        :type left: int
        :type right: int
        :rtype: List[int]
        """
        lists = []
        for i in range(left,right+1):
            s_i = str(i)
            if '0' in s_i:
                continue
            can = True
            for char in s_i:
                if i%int(char) != 0:
                    can = False
            if can==True:
                lists.append(i)
        return lists

----------------------------------------

自己再尝试一种不转成string的方法

84.74%

class Solution(object):
    def selfDividingNumbers(self, left, right):
        """
        :type left: int
        :type right: int
        :rtype: List[int]
        """
        lists = []
        for i in range(left,right+1):
            can = True
            num = i
            while(True):
                a = num%10
                if a==0 or i%a!=0:
                    can = False
                    break
                if ((num-a)/10)==0:
                    break
                else:
                    num = (num-a)/10
            if can==True:
                lists.append(i)
        return lists

------------------------------------------

74.39%

这个主要是发现,判断a%b>0要比a%b!=0要速度快,以后查看是否能整除的时候可以注意一下

class Solution(object):
    def selfDividingNumbers(self, left, right):
        """
        :type left: int
        :type right: int
        :rtype: List[int]
        """
        lists = []
        def self_divided(n):
            for i in str(n):
                if i=='0' or n%int(i)>0:
                    return False
            return True
        for i in range(left,right+1):
            if self_divided(i):
                lists.append(i)
        return lists

-------------------------------------

下面这个又是耍花腔时间,两行解决问题

27.29%

class Solution(object):
    def selfDividingNumbers(self, left, right):
        """
        :type left: int
        :type right: int
        :rtype: List[int]
        """
        is_self_dividing = lambda x: '0' not in str(x) and all([x%int(digit)==0 for digit in str(x)])
        return filter(is_self_dividing, range(left,right+1))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值