前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-728-Self Dividing Numbers

leetcode-728-Self Dividing Numbers

作者头像
chenjx85
发布2018-05-21 18:23:54
5760
发布2018-05-21 18:23:54
举报
文章被收录于专栏:chenjx85的技术专栏

题目描述:

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 == 0128 % 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:

代码语言:javascript
复制
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.

要完成的函数:

vector<int> selfDividingNumbers(int left, int right) 

说明:

1、要判断一个数是不是可自分的,看该数字是不是可整除数字上的每一位。比如128可整除8,可整除2,可整除1,所以128可自分。

现在给定一个左界限和一个右界限,要求返回包含左界限和右界限在内的所有可自分数。

2、最简单的思路就是,从左界限开始,逐个判断是不是可自分数,直到右界限。

每个数判断的过程也很简单。如下述代码:

代码语言:javascript
复制
    bool dividable(int a)
    {
        int b=a,t=0;
        while(b)
        {
            t=b%10;
            if(t==0||a%t!=0)//如果出现某一位是0或者不整除的情况
                return false;
            b/=10;
        }
        return true;
    }
    vector<int> selfDividingNumbers(int left, int right) 
    {
        vector<int>res;
        for(int i=left;i<=right;i++)
        {
            if(dividable(i))
                res.push_back(i);
        }
        return res;
    }

代码十分简单,实测4ms,beats 100% of cpp submissions。

3、一些其他想法(不太重要):

其实最开始的时候,笔者对于上述做法,觉得应该会超时的,可能还得像输出质数那道题一样,能够生成的就不要用逐个判断。

因此在想一些条件,比如10以内的数,全都是可自分的。

比如十几的数,要逐个判断。

比如二十几的数,只需要判断22,24,26,28,因为要整除十位的2,需要个位是2的整数倍。

比如三十几的数,只需要判断33,36,39,因为要整除十位的3,需要个位是3的整数倍。

四十几,就只有44,48。

五十几,就只有55。六十几,66。七十几,77。八十几,88。九十几,99。

一百以上的,从111开始考虑(之前都带0),百位是1不需要考虑,后面的十位和个位,和两位数一样的判断逻辑。

二百以上的,还是可以推出一些规则,比如248,后面的十位和个位需要是百位数值2的整数倍。

但是整体来看这些规则未免有点复杂,所以最后笔者也就没有实现出来,在这里做一些想法记录。

同学们有其他想法的,欢迎在评论区留言!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 要完成的函数:
  • 说明:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档