2017-02-15 8 views
2

私は、正の整数の配列をjavascriptの入力として持っています。出力は、入力で結合された配列要素から作成された最大の整数でなければなりません。例:数字の配列を結合する方法結果の数字はできるだけ大きいです。

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

私は私が使用されるが、それをやってのけることができない可能ロジックを知っていると思う...

私はお互いに隣り合う2つの配列要素を両方向に連結し、この値を比較することをお勧めします。どちらが大きいかはこのロジックを使用してすべての配列要素を並べ替えます。しかし、私は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 ] 

そして、結果は1秒間

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

関連する問題