算法--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.

 

题意:

self-dividing number 可理解为自除数,第三行可知 自除数不能含有数字0

判定自除数的规则:

把一个数num逐位分离(使用取余运算%10每次取出个位数),判断这个数num能否被分离出的数整除,如果所有位都能整除当前数num,则这个数num为 自除数

 

输入输出格式:

Input: 
left = 1, right = 22
Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

输入最小值和最大值(left和right)判断这个范围内的所有自除数,并返回一个 List

 

Python:

class Solution(object):
    def selfDividingNumbers(self, left, right):
        """
        :type left: int
        :type right: int
        :rtype: List[int]
        """
        rat=[]
        for i in range(left,right+1):
            num=len(str(i))
            flag=1
            j=i
            while(i):
                t=i%10
                if not t or j%t !=0:
                    flag=0
                    break
                i/=10
            if flag:
                rat.append(j)
        return rat

语法总结:

rat=[]可以声明一个空的列表,如果当前数是自除数,则使用rat.append()可以将当前数加入列表

使用左右范围时,需要将right+1

if 后必须跟一个冒号

num=len(str(i))可以求一个int型数的位数

posted @ 2017-12-17 15:22  Derek丶D  阅读(112)  评论(0编辑  收藏  举报