算法--leetcode 728. Self Dividing Numbers
题目:
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.
题意:
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型数的位数