2017-02-15 25 views
2

我有一个正整数数组作为javascript中的输入。输出应该是由输入中的组合数组元素创建的最大可能整数。例子:如何结合数组的数组,使结果数量尽可能在javaScript中

  1. 输入:[80,35,2,9,45,8]输出:988045352
  2. 输入:[509,7,49,21,527,2,742]输出:774252750949221

我想我知道可以使用,但不能把它关闭逻辑...

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

谢谢。

+0

你尝试过什么?你能否至少向我们展示创建数组的代码? –

+0

你需要更好地定义“组合” –

回答

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(''));

+0

嗨妮娜,这段代码可以工作,但我不会在最后得到整数。当我尝试使用Number()或parceInt()将字符串转换为整数时,它无法工作。你知道为什么吗?谢谢! –

+0

btw,'parseInt'。你可以在结果字符串前添加一个一元加号,如上所示。这将隐式转换为数字。 –

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("")

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(''));