1. 程式人生 > >劍指Offer-把陣列排成最小的數(Java實現)

劍指Offer-把陣列排成最小的數(Java實現)

題目描述

輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。

思路分析:
本題的核心思想還是排序,但是如何排序是個問題。
先將整型陣列轉換成字串陣列,然後按照自定義的比較器規則來排序。
對於任意兩個字串s1和s2,比較s1+s2和s2+s1,若s1+s2小於s2+s1則將s1放置s2前即可。

程式碼實現如下:

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

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        if(numbers == null){
            return null;
        }
        String[] str = new String[numbers.length];
        for(int i = 0 ; i < numbers.length ; i++){
            str[i] = String.valueOf(numbers[i]);
        }
        Arrays.sort(str,new Comparator<String>(){
            public int compare(String s1,String s2){
                String str1 = s1+s2;
                String str2 = s2+s1;
                return str1.compareTo(str2);
            }
        });
        StringBuffer sb = new StringBuffer();
        for(String string : str){
            sb.append(string);
        }
        return sb.toString();
    }
}