zoukankan      html  css  js  c++  java
  • [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;
    }
    
  • 相关阅读:
    你可能不知道的 transition 技巧与细节
    CSS奇思妙想 -- 使用 CSS 创造艺术
    生僻标签 fieldset 与 legend 的妙用
    CSS 奇思妙想边框动画
    (转)linux命令-- pstack命令(跟踪进程栈)
    (转)PostgreSQL 数据库错误代码解释
    postgresql灾备切换
    (转)postgresql配置参数和概念解释
    (转)PostgreSQL跨库操作Oracle利器-Oracle_fdw
    (转)PG运维常用知识点小结
  • 原文地址:https://www.cnblogs.com/arcsinw/p/9419077.html
Copyright © 2011-2022 走看看