2017-02-15 54 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(''));