题目原址
https://leetcode.com/problems/self-dividing-numbers/description/
题目描述
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.
Example1:
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.
解题思路
这个题是一个比较基础的题,想要求一个数是否能被其自身包含的数字整除,如果能则将其放在list集合中返回。这里面不是判断一个数,而是判断一串数字,给定了数的起始和结束,然后判断这个区间的数是否符合。注意包含端点。
解题的方法也很简单,自己另外定义一个方法,用来判断一个数是否满足条件,如满足条件则将其添加到list中。而判断一个区间是通过for循环来一次遍历的。
AC代码
class Solution {
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> l = new ArrayList<Integer>();
for(int i = left ; i <= right; i++) {
if(valid(i) != -1){
l.add(i);
}
}
return l;
}
//用来判断这个数是不是自包含
public int valid(int n) {
int temp = n;
int m = n;
while(temp > 0){
n = n % 10;
if(n == 0 || m % n != 0 )
return -1;
temp = (int) (temp - n) / 10;
n = temp;
}
return n;
}
}