我正在尝试解决一个算法挑战。以下是使用说明:
取号码: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循环后添加最后一个字符串