Leetcode #728. Self Dividing Numbers

Posted lhppom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode #728. Self Dividing Numbers相关的知识,希望对你有一定的参考价值。

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 == 0128 % 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

 


以上是关于Leetcode #728. Self Dividing Numbers的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 728. Self Dividing Numbers

Leetcode #728. Self Dividing Numbers

Python 解leetcode:728. Self Dividing Numbers

leetcode-728-Self Dividing Numbers

[LeetCode] 728. Self Dividing Numbers

算法--leetcode 728. Self Dividing Numbers