如何组合数字数组,使得结果数在javaScript中尽可能大

时间:2017-02-15 21:09:14

标签: javascript arrays

我有一个正整数数组作为javascript中的输入。输出应该是输入中组合数组元素创建的最大可能整数。示例:

  1. 输入:[80,35,2,9,45,8]输出:988045352
  2. 输入:[509,7,49,21,527,2,742]输出:774252750949221
  3. 我想我知道可以使用的逻辑但却没有把它拉下来......

    我猜两个方向相邻的两个数组元素应该在两个方向上连接,并且要比较这个值,哪一个更大,然后使用这个逻辑对所有数组元素进行排序。但是,我无法在javaScript中执行此操作。

    谢谢。

3 个答案:

答案 0 :(得分:6)

这样做:

a = [80,35,2,9,45,8];

result = a.sort((x,y)=> ""+x+y < ""+y+x);

结果:

[ 9, 8, 80, 45, 35, 2 ]

对于第二个结果是:

[ 7, 742, 527, 509, 49, 2, 21 ]

如果您想要一个号码,请在排序后使用.join("")

答案 1 :(得分:1)

您可以检查字符串是否小于切换值。

&#13;
&#13;
function sort(a, b) {
    return ('' + b + a) - ('' + a + b);
}

console.log(+[509, 7, 49, 21, 527, 2, 742].sort(sort).join(''));
console.log(+[80, 35, 2, 9, 45, 8].sort(sort).join(''));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

将整数转换为字符串后,比较他们的联盟:

&#13;
&#13;
function Comparator(a, b) {
  var s1 = a.toString();
  var s2 = b.toString();
  return (s2+s1).localeCompare(s1+s2);
}

var myArray = [509, 7, 49, 21, 527, 2, 742].sort(Comparator);
console.log(myArray.join(''));
&#13;
&#13;
&#13;