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

时间:2016-09-29 02:28:15

标签: javascript algorithm

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

  

取一个数字: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

我哪里错了?

1 个答案:

答案 0 :(得分:-1)

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