LeetCode 728. 自除数

自除数 是指可以被它包含的每一位数整除的数。

例如,128 是一个 自除数 ,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。
自除数 不允许包含 0 。

给定两个整数 left 和 right ,返回一个列表,列表的元素是范围 [left, right] 内所有的 自除数 。

示例 1:

输入:left = 1, right = 22
输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

1 <= left <= right <= 104

直接模拟即可:

class Solution {
public:
    vector<int> selfDividingNumbers(int left, int right) {
        vector<int> ans;
        for (int i = left; i <= right; ++i) {
            if (isSelfDividingNumber(i)) {
                ans.push_back(i);
            }
        }

        return ans;
    }

private:
    bool isSelfDividingNumber(int num) {
        int numBak = num;
        while (num) {
            int lastDigit = num % 10;
            if (!lastDigit) {
                return false;
            }

            if ((numBak % lastDigit) != 0) {
                return false;
            }

            num /= 10;
        }

        return true;
    }
};

如果输入的数字范围是n,每个数字的大小是m,此算法时间复杂度为O(nlgm),空间复杂度为O(1)。

posted @ 2023-02-19 00:26  epiphanyy  阅读(16)  评论(0)    收藏  举报  来源