您的位置:首页 > 其它

【LeetCode】728. Self Dividing Numbers

2018-01-18 15:30 375 查看
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(lef
4000
t / 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)碰到很多次,但一直不会用,下次要尝试用一用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode