javascript - 旋转最大 - JavaScript
问题描述
试图解决这个Codewars 挑战。
给定一个数字,我们将跟踪不同的(左)旋转结果并返回最大的结果。
然而,这种旋转不同于典型的旋转——因为旋转n
后数字的数量将保持不变,并且n
随着每次旋转而增加。
例如,给定 number 56789
,我们将有:
67895
(6个保持原位,7个旋转到后面)
68957
(6 和 8 留在原地,9 旋转到后面)
68579
(6、8 和 5 保持原位,7 旋转到后面)
68597
(6、8、5 和 9 保持原位 - 不会再发生旋转)
然后从这些值中返回最大值 - 68957
。
我有以下代码:
function maxRot(n) {
let listOfNums = [];
let array = Array.from(n.toString());
let num = 0;
while (num < array.length -1) {
let number = array.splice(num, 1);
array.push(Number(number));
listOfNums.push(Number(array.join("")));
num++;
}
listOfNums.sort((a, b) => b - a);
return listOfNums[0];
}
console.log(maxRot(56789));
但它在 Codewars 上近一半的测试都失败了。
而且如你所见,我的逻辑是每次拼接一个数字并附加到数组的末尾,然后将更新后的数组推入一个listOfNums
数组,然后将该数组从大到小排序并返回第一个值。
不知道还有什么可以尝试的。
同样,这里是挑战的链接。
解决方案
正如@georg 指出的那样,我忘记将原始号码添加回列表中。
function maxRot(n) {
let listOfNums = [];
let array = Array.from(n.toString());
let num = 0;
while (num < array.length -1) {
let number = array.splice(num, 1);
array.push(Number(number));
listOfNums.push(Number(array.join("")));
num++;
}
listOfNums.unshift(n);
listOfNums.sort((a, b) => b - a);
return listOfNums[0];
}
推荐阅读
- android - RangeError(索引):无效值:不在 0..5 范围内,包括:6:Flutter SliverChildBuilderDelegate
- amazon-web-services - CloudFormation 脚本从 API Gateway 和 Lambda 返回二进制文件
- python - 元素不可点击,因为另一个元素遮住了它
- javascript - 如何在我的项目中创建一个文件夹并在单击按钮或链接时自动下载它
- python - 随机化 2 个 CSV 文件
- javascript - 使一个处理程序为反应中的所有输入元素去抖动
- angular - Angular 6 中的“查看更多”按钮将打开所有段落,而不仅仅是一个段落
- ios - Amazon Rekognition 从流视频中检测名人
- wordpress - 在 Javascript 中更新 Gutenberg 全局调色板
- reactjs - 反应组件中'this'的用途是什么