1. 程式人生 > 其它 >每日演算法之把陣列排成最小的數

每日演算法之把陣列排成最小的數

JZ45 把陣列排成最小的數

描述

輸入一個非負整數陣列numbers,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。
例如輸入陣列[3,32,321],則打印出這三個數字能排成的最小數字為321323。
1.輸出結果可能非常大,所以你需要返回一個字串而不是整數
2.拼接起來的數字可能會有前導 0,最後結果不需要去掉前導 0

具體做法

step 1:優先判斷空陣列的特殊情況。
step 2:將陣列中的數字元素轉換成字串型別。
step 3:過載排序比較為字串型別的x + y < y + x,然後進行排序。
step 4:將排序結果再按照字串拼接成一個整體。

程式碼

package mid.JZ45把陣列排成最小的數;

import java.util.Arrays;
import java.util.Comparator;

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        if(numbers == null || numbers.length == 0) {
            return "";
        }

        String[] strArr = new String[numbers.length];

        for (int i = 0; i < numbers.length; i++) {
            strArr[i] = numbers[i] + "";
        }

        Arrays.sort(strArr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                String s1 = o1 + o2;
                String s2 = o2 + o1;
                return s1.compareTo(s2);
            }
        });

        StringBuilder res = new StringBuilder();
        for (String s : strArr) {
            res.append(s);
        }

        return res.toString();
    }
}