728. 自除数『简单』

题目来源于力扣(LeetCode

一、题目

728. 自除数

题目相关标签:数学

说明:

  • 每个输入参数的边界满足 1 <= left <= right <= 10000

二、解题思路

  1. 遍历 left 到 right 元素,对每个数值元素进行判断

  2. 若遍历元素在 [1, 9] 区间内,加入结果集,一位数必定是自除数

  3. 其他的元素,进行循环取个位数的操作,判断个位数上的元素是否不为 0 且能够被当前遍历元素整除

三、代码实现

public static List<Integer> selfDividingNumbers(int left, int right) {
    List<Integer> list = new ArrayList<>();
    for (int i = left; i <= right; i++) {      
        // 不能改变 i 的值,将 i 赋值给 num
        int num = i;
        // 1 ~ 9 加入结果集
        if (num < 10) {
            list.add(num);
            continue;
        }
        // 对 i 进行取个位数的操作
        while (num > 0) {
            // 取个位数
            int j = num % 10;
            // 自除数中 位上的数字不为0,且每一位都能被该 i 整除
            if (j == 0 || i % j != 0) {
                break;
            }
            // 舍弃个位数
            num = num / 10;
        }
        // num 能够被整除到 0,说明满足以上判断条件,加入结果集
        if (num == 0) {
            list.add(i);
        }
    }
    return list;
}

四、执行用时

五、部分测试用例

public static void main(String[] args) {
    int left = 1, right = 22;  // output: {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22}

    List<Integer> result = selfDividingNumbers(left, right);
    System.out.println(result);
}
posted @ 2020-07-06 21:01  知音12138  阅读(48)  评论(0编辑  收藏