给一个正整数 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);
}
}