自除数 是指可以被它包含的每一位数整除的数。
例如,128 是一个 自除数 ,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。 自除数 不允许包含 0
给定两个整数 left 和 right ,返回一个列表,列表的元素是范围 [left, right] 内所有的 自除数 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/self-dividing-numbers
思路如下:
- 确定判断自除数方法
- 分出每一位数,判断是否为0,或者是否能被该数整除
- 遍历给定范围的数,寻找数
- 将符合条件的数放到数组中
C语言写法
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* selfDividingNumbers(int left, int right, int* returnSize){
int *res = malloc(sizeof(int) * (right - left + 100));
int index=0;
for(int num=left;num<=right;num++)
{
int temp = num;
int sign = 1;
while (temp)
{
int m = temp % 10;
if (m ==0 || num % m)//如果包含0或者除不尽每一位
{
sign = 0;
break;
}
temp /= 10 ;
}
if (sign == 1)
{
res[index++]=num;
}
}
*returnSize=index;
return res;
}
JS
这题用JS有几个核心的方法
split
split() 方法使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。-MDN
如果后面不给指定参数,那么就会将该字符串直接转成数组.例如:"jian"-'j','i','a','n'
因此可以拿它来转换数组
every
every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。-MDN
every是在所给用力能满足所有的测试,才返回true,否则是false
some和它相反
/**
* @param {number} left
* @param {number} right
* @return {number[]}
*/
var selfDividingNumbers = function(left, right) {
let res=[];
for(let num=left;num<=right;num++)
{
if(judge(num))
{
res.push(num);
}
}
console.log(res);
return res;
};
const judge=(num)=>{
let str=[];
str=num.toString().split('');
return str.every((item)=>num%Number(item)===0);
}
每周一道,快乐加倍!