我正在尝试解决算法挑战。以下是说明:
取一个数字: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
我哪里错了?
答案 0 :(得分:-1)
编辑:为了清楚起见,在这里添加正确的解决方案(从我下面的评论中复制): 我发现你的逻辑中有什么错误,你忘了添加序列的第一个数字:)把这行推到for循环中的其他2行之上:numbersArray.push(parseInt(n.join(“”)) )。此外,您应该在离开for循环后添加最后一个字符串