1. 程式人生 > >Self Dividing Numbers 自除數

Self Dividing Numbers 自除數

自除數 是指可以被它包含的每一位數除盡的數。

例如,128 是一個自除數,因為 128 % 1 == 0128 % 2 == 0128 % 8 == 0

還有,自除數不允許包含 0 。

給定上邊界和下邊界數字,輸出一個列表,列表的元素是邊界(含邊界)內所有的自除數。

示例 1:

輸入: 
上邊界left = 1, 下邊界right = 22
輸出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

注意:

  • 每個輸入引數的邊界滿足 1 <= left <= right <= 10000

思路:由於自除數需要對自己的每一位進行操作,而且這裡給出的是一個範圍內求自除數,所以複雜度是O(m*n),其中m是right-left+1,n是這個範圍內的數,對應每個數平均有多少個數字。

參考程式碼:

class Solution {
public:
    vector<int> selfDividingNumbers(int left, int right) {
        vector<int> res;
        for (int i = left,n=i; i <= right; i++) {
            for (n=i; n > 0; n /= 10) {
                if (!(n % 10) || i % (n % 10)) break;
            }
            if (!n) res.push_back(i);
        }
        return res;
    }
};