• [LeetCode] 728. Self Dividing Numbers


    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 1:

    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.

    打印出leftright范围内的所有Self Dividing Numbers

    1.可以被这个数包含的每个数字整除
    2.数字中没有0

    拼拼凑凑写出一个粗糙的版本,逻辑混乱,但我第一个版本的代码就长这样,不打草稿多思考就开写就是这个后果

    vector<int> selfDividingNumbers(int left, int right) {
        vector<int> result;
    
        for (int i = left; i <= right; i++)
        {
            if (i < 10)
            {
                result.push_back(i);
                continue;
            }
    
            if (i % 10 == 0)
            {
                continue;
            }
    
            bool isSelfDividing = true;
    
            int tmp = i;
    
            while (tmp % 10 != 0)
            {
                if (i % (tmp % 10) != 0)
                {
                    isSelfDividing = false;
                }
                tmp /= 10;
            }
    
            if (tmp >= 10)
            {
                isSelfDividing = false;
            }
    
            if (isSelfDividing)
            {
                result.push_back(i);
            }
        }
        return result;
    }
    

    这个版本的代码太乱了,实在拿不出手,优化一下

    1.小于10的数都是Self Dividing Numbers
    2.不包含0(不能被10整除)
    3.能被自身包含的每个数字整除(写个for循环取模)

    bool isSelfDividing(int num)
    {
        if (num < 10)
        {
            return true;
        }
    
        for (int i = num; i != 0; i /= 10)
        {
            if (i % 10 == 0)
            {
                return false;
            }
            if (num % (i%10) != 0)
            {
                return false;
            }
        }
    
        return true;
    }
    
    vector<int> selfDividingNumbers(int left, int right) {
        vector<int> result;
    
        for (int i = left; i <= right; i++)
        {
            if (isSelfDividing(i))
            {
                result.push_back(i);
            }
        }
        return result;
    }
    
  • 相关阅读:
    普通平衡树(treap与splay模板)
    NOIP2009T4 靶形数独
    单调队列模板
    NOIP2010引水入城
    数差
    NOIP2016DAY2T1 组合数问题
    NOIP2016 D2T3 愤怒的小鸟
    NOIP双栈排序
    膜拜
    斐波那契数列
  • 原文地址:https://www.cnblogs.com/arcsinw/p/9419077.html
Copyright © 2020-2023  润新知