亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Codewars問題“快樂數字”我如何才能對我的代碼進行一些更改以使其正常工作?

Codewars問題“快樂數字”我如何才能對我的代碼進行一些更改以使其正常工作?

一只斗牛犬 2021-05-03 12:35:01
我正在使用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個贊

也許一些簡單的事情會有所幫助

  • 使用Setfor的訪問值來防止永遠不會結束的循環(記憶化),

  • 完全取數值,僅用于分割成單個數字時,取一個字符串,

  • 通過簡單的乘法來總結,

  • 現在有一些退出功能:

    • 檢查是否sum1,使用退出功能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));


查看完整回答
反對 回復 2021-05-20
  • 1 回答
  • 0 關注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號