Codewars问题“快乐数字”我如何才能对我的代码进行一些更改以使其正常工作?

我正在使用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))

}


一只斗牛犬
浏览 256回答 1
1回答

弑天下

也许一些简单的事情会有所帮助使用Setfor的访问值来防止永远不会结束的循环(记忆化),完全取数值,仅用于分割成单个数字时,取一个字符串,通过简单的乘法来总结,现在有一些退出功能:检查是否sum为1,使用退出功能true,检查是否sum已访问了如果是这样,与退出false,通过使用再次调用该函数并使用来sum更新setvisited来返回sum。function happyNumbers(x, visited = new Set) {&nbsp; &nbsp; var sum = 0, value;&nbsp; &nbsp; for (value of String(x)) sum += value * value;&nbsp; &nbsp; if (sum === 1) return true;&nbsp; &nbsp; if (visited.has(sum)) return false;&nbsp; &nbsp; return happyNumbers(sum, visited.add(sum));}console.log(happyNumbers(123));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript