gpt4 book ai didi

javascript - Codewars 问题 'Happy numbers' 我怎样才能对我的代码进行一些更改以使其工作?

转载 作者:行者123 更新时间:2023-11-30 14:03:05 25 4
gpt4 key购买 nike

我正在处理 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))
}

最佳答案

也许一些更简单的方法会有所帮助

  • 使用Set用于访问值以防止永不结束的循环(Memoization),
  • 完全取数值,只是为了拆分成个位数,取一个字符串,
  • 使用简单的乘法进行总结,
  • 现在一些退出函数:
    • 检查sum是否为1,如果为true则退出函数,
    • 检查 sum 是否已经被访问,如果是,则以 false 退出,
  • 通过使用 sum 再次调用函数返回并使用 sum 更新集合 visited

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));

关于javascript - Codewars 问题 'Happy numbers' 我怎样才能对我的代码进行一些更改以使其工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55954571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com