题目地址:https://leetcode.com/problems/self-dividing-numbers/description/
大意:判断一个数字各个位上不含数字0,且每个位上的数字都能被这个数字整除,返回给定范围内一系列数字符合这个条件的数字。
主要是先写一个方法判定这个数字到底是不是能符合条件
def isDividingNumber(self, num):
if '0' in str(num):
return False
else:
return 0 == sum(num%int(i) for i in str(num))
def selfDividingNumbers(self, left, right):
"""
:type left: int
:type right: int
:rtype: List[int]
"""
list =[]
for item in range(left,right+1,1):
if self.isDividingNumber(item):
list.append(item)
return list
但是感觉写的有点麻烦,参考了一下discuss里面大神的代码,果然有更简单的。只要3行。
def selfDividingNumbers2(self, left, right):
"""
:type left: int
:type right: int
:rtype: List[int]
"""
is_self_dividing = lambda num: '0' not in str(num) and all([num % int(digit) == 0 for digit in str(num)])
x = filter(is_self_dividing, range(left, right + 1))
return list(x)
知识点:
all()
,filter()
这两个方法的使用