Javascript:乘法持久性问题建议的解决方案执行超时

标签 javascript function loops if-statement while-loop

我有以下问题:

写一个函数 persistence,它接受一个正参数 num 并返回它的乘法 persistence,这是你必须将 num 中的数字相乘直到达到一位数的次数。

function persistence(num) {

  let count = 0; 
  let numStr = num.toString(); 

   if (numStr.length === 1){
     return 0
   } 

   if (numStr.length === 2){
     while (numStr.length > 1){
       count += 1
       numStr = (Number(numStr[0])*Number(numStr[1])).toString() 
     }
   }

   if (numStr.length === 3){
     while (numStr.length > 1){
       count += 1
       numStr = (Number(numStr[0])*Number(numStr[1])*Number(numStr[2])).toString() 
     }
   }

   return count 
}

persistence(999) //solution 4

我收到“执行超时(12000 毫秒)”错误。我知道有不同的方法可以解决这个问题,但我想具体了解我的代码出了什么问题。

最佳答案

您的代码无法正常工作的原因是您总是将 str[2] 添加到最终结果。

999 > 729 > 126 > 12 > 2

所以在这里您看到一个循环编号变为 12 并且 str[2]undefined 并且它将是 NaN 所以循环永远不会结束。

一个简单的方法是在 while 中使用 reduce() 并且在相乘时不需要转换为 Number()

function persistence(num) {

  let count = 0; 
  num = String(num);
  while(num.length > 1){
    count++;
    num = String([...num].reduce((ac,a) => a * ac,1));
  }
  return count;
}

console.log(persistence(999))

关于Javascript:乘法持久性问题建议的解决方案执行超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55536199/

相关文章:

c++ - 在 C++ 中查找 char* 数组中的 char* 元素

python - 如何使用循环检查字符串中的所有字符是否大写

c# - 两个不同的类中是否可以重载

python - 在Python中迭代嵌套元组

javascript - touchmove 后 Touchend 不触发

javascript - 如何访问另一个文件中函数的状态

javascript - Safari 中未定义 fetch(ReferenceError : Can't find variable: fetch)

Javascript onclick 事件未在 Firefox 中触发

javascript - 添加元素动态后的JQuery绑定(bind)事件

javascript - Angular - 每个显示和隐藏元素的分隔变量