題目詳情:
輸入一個非負整數數組numbers,把數組里所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。
例如
輸入數組[3,32,321],則打印出這三個數字能排成的最小數字為321323。
1.輸出結果可能非常大,所以你需要返回一個字符串而不是整數
2.拼接起來的數字可能會有前導 0,最后結果不需要去掉前導 0
解題思路:
將數組轉換為字符串數組。
自定義排序方法,比較兩個字符串 str1 和 str2 的拼接結果 str1+str2 和 str2+str1 的大小。
如果 str1+str2 < str2+str1,則 str1 排在 str2 前面。
如果 str1+str2 > str2+str1,則 str2 排在 str1 前面。
如果 str1+str2 = str2+str1,則 str1 和 str2 相對位置不變。
使用自定義的排序方法對字符串數組進行排序。
將排序后的字符串按順序拼接起來,得到的結果即為能拼接出的所有數字中最小的一個。
代碼實現:
function minNumber(numbers) {
    // 將數組轉換為字符串數組
    const strArr = numbers.map(num => num.toString());
    // 自定義排序方法
    strArr.sort((a, b) => {
        const str1 = a + b;
        const str2 = b + a;
        if (str1 < str2) {
            return -1;
        } else if (str1 > str2) {
            return 1;
        } else {
            return 0;
        }
    });
    // 拼接排序后的字符串
    return strArr.join('');
}
// 測試示例
console.log(minNumber([3, 32, 321])); // 輸出: "321323"