旋转数组并返回最大的数字,不适用于非常大的数字



我正在尝试解决一个算法挑战。以下是使用说明:

取号码:56789。向左旋转,得到67895。

保留第一位数字,其余数字向左旋转:68957。

保持前两位数字不变,并旋转其他数字:68579。

保留前三位数字,其余部分向左旋转:68597。现在是由于保留了前四位,它只剩下一个数字旋转后为自身

你有以下的数字序列:

56789 -> 67895 -> 68957 -> 68579 -> 68597

,必须返回最大的值:68957。

调用函数max_rot(或maxRot或…取决于语言)

max_rot(56789)应该返回68957

这是我的解决方案,它适用于所有测试,但当给定更大的数字时,它失败了。谁能告诉我为什么失败了?它应该适用于所有情况。

function maxRot(n) {
var numbersArray =[];

n = n.toString().split("")
for(i=0;i<n.length;i++){
   var extractedChars = n.splice(i,1)
   n.push(extractedChars[0])
   numbersArray.push(parseInt(n.join("")))
}

   return Math.max(...numbersArray)
}

下面是一些错误的例子:

期望:507992495,结果:99249557

期望:433039515,结果:330395154

预期值:210882952,实际值:188295220

我哪里错了?

编辑:为了清晰起见,在这里添加正确的解决方案(复制自我下面的评论):我发现你的逻辑错误是什么,你忘记添加序列的第一个数字:)将这行推到for循环内的其他2行之上:numbersArray.push(parseInt(n.join("))))。此外,您还应该在离开for循环后添加最后一个字符串

最新更新