我正在使用Codewars问题'Happy Numbers'这是链接https://www.codewars.com/kata/happy-numbers-5/train/javascript这是问题,当我在n> 98时运行代码时已达到最大调用堆栈大小。如何对我的代码进行一些更改以解决此问题?function happyNumbers(x){ var res = []; for (let i = 1; i <= x; i++){ var str = []; if (helper(str,i)){res.push(i)} } return res}function helper(str,n){ var num = 0; if (n === 1){return true} if (str.indexOf(n) > -1){return false} str.push(n); if (n.toString().length === 1){num = Math.pow(n,2).toString()} if (n.toString().length >= 2){ num = n.toString().split('') .reduce((a,b) => Math.pow(a,2)+ Math.pow(b,2)).toString(); } return helper(str,Number(num))}
1 回答
弑天下
TA贡献1818条经验 获得超8个赞
也许一些简单的事情会有所帮助
完全取数值,仅用于分割成单个数字时,取一个字符串,
通过简单的乘法来总结,
现在有一些退出功能:
检查是否
sum
为1
,使用退出功能true
,检查是否
sum
已访问了如果是这样,与退出false
,通过使用再次调用该函数并使用来
sum
更新setvisited
来返回sum
。
function happyNumbers(x, visited = new Set) {
var sum = 0, value;
for (value of String(x)) sum += value * value;
if (sum === 1) return true;
if (visited.has(sum)) return false;
return happyNumbers(sum, visited.add(sum));
}
console.log(happyNumbers(123));
添加回答
举报
0/150
提交
取消