题目
自除数 是指可以被它包含的每一位数除尽的数。
例如,128 是一个自除数,因为 128 % 1 == 0
,128 % 2 == 0
,128 % 8 == 0
。
还有,自除数不允许包含 0 。
给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。
示例 1:
1 | 输入: |
注意:
- 每个输入参数的边界满足 1 <= left <= right <= 10000。
题解
正常思路
- 遍历从
left
到right
到每个数 - 如果这个数符合要求,把它添加到输出列表中
- 如何判断是否符合要求?
- 设置一个临时变量等于这个原数
- 每次让临时变量对10取余,即是临时变量的末尾,比如128对10取余的结果是8
- 判断原数对这个余数是否能整除,不能就直接
break
了,进入下一个数 - 临时变量对自己整除10,比如128整除10就是12了,这样再下个循环中取余就是2
- 注意两点
- 取余数后要先判断是否等于0,因为没有办法对0求余数。注意
or
运算先算左边再算右边,顺序不能错咯 - 设置一个临时变量是否等于0的判断,来鉴别
while
是被break
了还是正常结束。
- 取余数后要先判断是否等于0,因为没有办法对0求余数。注意
代码
8 行 超简单。
1 | class Solution: |
花样一行法
参考https://leetcode-cn.com/problems/self-dividing-numbers/solution/python3-chao-duan-just-for-fun-by-quantumbird/
思路是用生成器和生成器的条件筛选构造一个列表,看代码就懂了,挺清晰的。
提一下 all()
函数,是这样的,如果里面的参数每一项都是True
,那么返回True
,否则返回False
,any()
与之对应。
1 | class Solution: |