問題描述:給定一個正整數序列,請嘗試將它們重新排列使得排列的結果最大,例如正整數序列為9,31,35,3,7則最大值為9735331.
思路分析:先將正整數序列轉換為字符串數組,然后字符串數組進行排序,最后依次輸出字符串數組即可。根據題目的要求,兩個數字m和n排成的數字mn和nm,如果mn<nm,那么我們應該輸出nm,也就是m應該排在n的后面,也就是m<n。反之,如果nm<mn,m排在n的前面,n<m。如果mn==mn,m等於n。 比較函數的定義是本解決方案的關鍵。這道題其實就是希望我們能找到一個排序規則,根據這個規則排出來的數組能排成一個最大的數字。例如一個正整數序列31,3;則313<331,所以排序時結果為3,31.若要用js代碼實現只需重寫sort方法的比較函數即可。
javascript代碼實現如下:
function getResortMax() { var arr = []; //將整數序列轉換為字符串數組 for (var i = 0; i < arguments.length; i++) { arr.push(arguments[i].toString()); } //重寫sort排序方法 arr.sort(function (a, b) { if (a + b > b + a) {//a應該排在b前,所以return -1 return -1; } else if (b + a > a + b) {//a應該排在b后面,所以return 1; return 1; } else { return 0; } }); return arr.join(""); }
運行結果:

