问题描述:
Self Diving Numbers 被定义为:这个数可以被它的每一位整除。若某一位是0,则它不是Self Diving Numbers
找出一定范围内所有的这种数
思路:
这种用求余法对一个整数逐位拆解的算法练习的比较多了,所以直接上代码
class Solution {
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> list=new ArrayList<>();
for(int i=left; i<=right; i++){
if(isSelfDiving(i)) list.add(i);
}
return list;
}
private boolean isSelfDiving(int n){
int original=n;
while(n>0){
int cur=n%10;
if((cur==0)||((original%cur)!=0)) return false;
n=n/10;
}
return true;
}
}
时间复杂度:近似认为isSelfDiving可以在常数时间内O(1)完成,所以整体的时间复杂度为O(right-left)