728.自除数

难度中等

1. 问题描述

这里直接采用LeetCode上面的问题描述。

自除数 是指可以被它包含的每一位数整除的数。

  • 例如,128 是一个 自除数 ,因为 128 % 1 == 0128 % 2 == 0128 % 8 == 0

自除数 不允许包含 0 。

给定两个整数 left 和 right ,返回一个列表,列表的元素是范围 [left, right] 内所有的 自除数 。

提示

  • 1 <= left <= right <= 104

2. 思路

  我们需要判断一个数是否是 自除数 首先要将他所有的数都拆出来,例如 120 要拆除 1/2/0 三个数, 再用 120 自身对拆出来的三个数进行求余运算,如果对所有拆出来的数求余都得 0 得话,则该数为自除数,但是在 120 中含有 0 则该数不是 自除数.

  综上所述,我们可以边提取出 一个数 边进行判断是否满足要求,如不满足则直接跳过拆出来得全部数都满足要求则 该数存储进 答案中进行返回.

3. 解题

 1 class Solution {
 2 public:
 3     bool IsSelfDividingNumbers(int n){
 4         int num = n;
 5         while(num){
 6             //计算除数
 7             int diviser = num % 10;
 8             //如果除数为 0 或者 n 与 除数求余不为0,那么直接返回false
 9             if(!diviser or n % (diviser)){
10                 return false;
11             }
12             num /= 10;
13         }
14         //全部符合要求 则 返回 true
15         return true;
16     }
17     vector<int> selfDividingNumbers(int left, int right) {
18         vector<int> ans;
19         for(left; left <= right; left++){
20             //这里判断是否符合自除数要求,符合要求则添加到答案中
21             if(IsSelfDividingNumbers(left)){
22                 ans.push_back(left);
23             }
24         }
25         return ans;
26     }
27 };

 

posted @ 2022-03-31 20:36  Alakid  阅读(180)  评论(0)    收藏  举报