题目地址:
https://www.lintcode.com/problem/self-dividing-numbers/description
给定一个正整数 ,若 能整除其每一位,则称其为self dividing numbers。给定上下界 和 ,要求返回 内的所有self dividing numbers。
直接用for循环然后逐个判断即可。代码如下:
import java.util.ArrayList;
import java.util.List;
public class Solution {
/**
* @param lower: Integer : lower bound
* @param upper: Integer : upper bound
* @return: a list of every possible Digit Divide Numbers
*/
public List<Integer> digitDivideNums(int lower, int upper) {
// write your code here
List<Integer> res = new ArrayList<>();
if (lower > upper) {
return res;
}
// 注意这里一定要用long,否则如果upper取的是Integer.MAX_VALUE时,
// 当i取upper判断完后i++,i就变成了Integer.MIN_VALUE,然后就死循环了
// 用long的话就能正确跳出循环
for (long i = lower; i <= upper; i++) {
int num = (int) i;
if (check(num)) {
res.add(num);
}
}
return res;
}
private boolean check(int n) {
int m = n;
while (n > 0) {
int tmp = n % 10;
if (tmp == 0 || m % tmp != 0) {
return false;
}
n /= 10;
}
return true;
}
}
时间复杂度 。