题目描述(来源于LeetCode)

自除数 是指可以被它包含的每一位数整除的数。

  • 例如,128 是一个 自除数 ,因为 128 % 1 == 0128 % 2 == 0128 % 8 == 0
    自除数 不允许包含 0 。
    给定两个整数 left 和 right ,返回一个列表,列表的元素是范围 [left, right](包括两个端点)内所有的 自除数 。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution:
def selfDividingNumbers(self, left: int, right: int) -> List[int]:
result = []
for num in range(left, right + 1):
temp = num
is_self_dividing = True

while temp :
digit = temp % 10

if digit == 0 or num % digit != 0:
is_self_dividing = False
break

temp //= 10

if is_self_dividing:
result.append(num)

return result

复杂度分析

  • 时间复杂度:O(dx)O(dx)——d为数字位数;x=right-left+1
  • 空间复杂度:O(K)O(K)——k为自除数个数