我有一个正整数数组作为javascript中的输入。输出应该是输入中组合数组元素创建的最大可能整数。示例:
[80,35,2,9,45,8]
输出:988045352
[509,7,49,21,527,2,742]
输出:774252750949221
我想我知道可以使用的逻辑但却没有把它拉下来......
我猜两个方向相邻的两个数组元素应该在两个方向上连接,并且要比较这个值,哪一个更大,然后使用这个逻辑对所有数组元素进行排序。但是,我无法在javaScript中执行此操作。
谢谢。
答案 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)
您可以检查字符串是否小于切换值。
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;
答案 2 :(得分:0)
将整数转换为字符串后,比较他们的联盟:
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;