difficult:easy #728
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, and 128 % 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 :

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

解法一:

#include<vector>
std::vector<int> selfDividingNumbers(int left, int right) {
    std::vector<int> result;
    while (left <= right){
        int x = left;
        bool flag = true;
        while (x != 0 && flag){
            int pos = x % 10;
            if (pos == 0){
                flag = false;
                break;
            }
            if (left % pos != 0) {
                flag = false;
            }
            x = x / 10;
        }
        if (flag)
            result.push_back(left);
        left++;
    }
    return result;
}

解法二:

#include<vector>
#include<sstream>
#include <string>
std::vector<int> selfDividingNumbers(int left, int right) {
    std::vector<int> result;
    while (left <= right) {
        std::string str;
        std::stringstream buf;
        buf << left;
        buf >> str;
        bool flag = true;
        for(char c : str){
            if (c == '0' || left % (c - '0') > 0){
                flag = false;
                break;
            }
        }
        if (flag){
            result.push_back(left);
        }
        left++;

    }
    return result;
}

版权声明:原创,转载请注明来源,否则律师函警告



leetcode      leetcode

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!