英文题目:
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
, and128 % 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.
Example 1:
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
.
中文题目 :
一个自划分数是一个数字,是由它所包含的每个数字整除。
例如,128是自分割数,因为
128 % 1 == 0
,128 % 2 == 0
和128 % 8 == 0
。此外,不允许自分割数包含数字零。
给定数字的下限和上限,输出每个可能的自划分数的列表,如果可能,包括边界。
例1:
输入: left = 1,right = 22 输出: [1,2,3,4,5,6,7,8,9,11,12,15,22]
注意:每个输入参数的边界是
1 <= left <= right <= 10000
。
解析:
第一次提交采用字符串截取的方式获取数值的每一位数字,效率不高,优化后采用第二种算的方式果然运行加快。
提交结果一:
class Solution {
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> list=new ArrayList<>();
for(int i=left;i<=right;i++){
if(isDividingNumber(i)){
list.add(i);
}
}
return list;
}
//判断是否是自我分割数
public static boolean isDividingNumber(int number){
String i=number+"";
char[] c=i.toCharArray();
for (char x:c) {
int y=Integer.parseInt(x+"");
if(y==0||number%y!=0){
return false;
}
}
return true;
}
}
提交结果二:
class Solution {
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> list=new ArrayList<>();
for(int i=left;i<=right;i++){
if(isDividingNumber(i)){
list.add(i);
}
}
return list;
}
//判断是否是自我分割数
public boolean isDividingNumber(int number){
int val=number;
while(val>=1){
int temp = val%10;
if(temp==0||number%temp!=0){
return false;
}
val = val/10;
}
return true;
}
}