【算法】找出7的倍数或者含有7的数字

1,378 阅读1分钟

给一个正整数 n,找出从 0 到 n 中所有 7 的倍数和含有7的元素。

注意: 不可以将 n 转换为字符串操作,即只能将 n 作为 Number 操作。

示例:
输入: 21
输出: [7, 14, 17, 21]
/**
* @param {number} n
* @return {number[]}
*/
var m7 = function(n) {
   const res = [];
   for(let i = 1; i < n + 1; i++) {
       if (i % 7 === 0) {
           res.push(i);
       } else {
           include7(i, i, res)
       }
   }
   console.log(res);
   return res;
}

var include7 = function(c, i, res) {
   if (i < 10) {
       if (i === 7 && !res.includes(c)) {
           res.push(c);
       }
       return;
   }
   // 如果满足 i % 10 === 7 (比如 117),则添加到结果集中,并返回主循环体
   if (i % 10 === 7) {
       if (!res.includes(c)) {
           res.push(c);
       }
       return;
   } else {
       // 如果不满足 i % 10 === 7 (比如 171),则 除 10 取整,继续递归
       // 即: include7(171, 17, res)
       include7(c, Math.floor(i/10), res);
   }
}