728. 自除数
selfDividingNumbers
一、解题思路
1、解法一( Java )
解法思路:暴力简单模拟
循环遍历所给的整数,然后将整数转换为字符串 String.valueOf(i)
,循环判断是否可以被它包含的每一位数整除 或者 它包含的每一位数是否包含 0
,当不满足自除数条件时让 flag == false
,只有当 flag == true
时才将该数添加到 list
当中
伪代码如下:
/**
* @author Listen 1024
* @description 728. 自除数
* @date 2022-03-31 8:45
*/
class Solution {
public List<Integer> selfDividingNumbers(int left, int right) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = left; i <= right; ++i) {
String ans = String.valueOf(i);
boolean flag = true;
int len = ans.length();
for (int j = 0; j < len; ++j) {
int temp = Integer.parseInt(String.valueOf(ans.charAt(j)));
if ((temp == 0) || (i % temp != 0)) {
flag = false;
break;
}
}
if (flag) {
list.add(i);
}
}
return list;
}
}
1、解法二( Java )
解法思路:简单模拟优化一
遍历整数的每一位的方法是,每次将当前整数对 10
取模即可得到当前整数的最后一位,然后将整数除以 10
。重复该操作,直到当前整数变成 0
时即遍历了整数的每一位。
/**
* @author Listen 1024
* @description 728. 自除数
* @date 2022-03-31 8:45
*/
class Solution {
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> list = new ArrayList<Integer>();
Label:
for (int i = left; i <= right; ++i) {
int res = i;
while (res != 0) {
int temp = res % 10;//res最后一位上的数
if (temp == 0 || i % temp != 0) {
continue Label;
}
res = res / 10;
}
list.add(i);
}
return list;
}
}
运行结果截图如下: