首页 > 解决方案 > 旋转最大 - 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数组,然后将该数组从大到小排序并返回第一个值。

不知道还有什么可以尝试的。

同样,这里是挑战的链接

标签: javascriptarrayssortingrotation

解决方案


正如@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];
}

推荐阅读