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
题意:定义了一种数字叫self-dividing,这类数字不包括0本身,然后自身数字包括的数字都能被整除,比如说24,自身包括2、4都能整除24,就是目标数字了,最后让找出一个范围内的所有的self-dividing
想法:其实想法很简单就是枚举这个范围里面的所有数字,然后1)判断有没有包括0,2)依次判断自身包含的数字能不能整除整个数字。应该都能很快就能实现出来,发现了实现的速度不算快,在以下几个地方做了改动
(1)就是不单独判断0,之前的写法是在转换成python中的字符串数组后先整体判断下有没有包括0,但其实这一步是不那么必要的,完全可以在判断它的特性,即是否能整除的这个过程中判断,代码上稍微会整洁一些
(2)另外一个就是我之前是把整个数字都先转换成字符串数组,多了转换这一步,其实是可以通过求余自除来得到自身数组,就可以少转换成数组这一步
tips:需要注意的是这个过程中的数据类型的判断,要判断数字0还是整数0,
1 class Solution(object): 2 def selfDividingNumbers(self, left, right): 3 """ 4 :type left: int 5 :type right: int 6 :rtype: List[int] 7 """ 8 target_num = list() 9 for i in range(left, right+1): 10 nums = i 11 while nums!=0: 12 num = nums%10 13 if num == 0 or i % num != 0: 14 break 15 nums = nums/10 16 if nums==0: 17 target_num.append(i) 18 return target_num