把數組排成最小的數

題目描述

輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。

輸入實例

輸入數組{3,32,321}

輸出實例

打印出這三個數字能排成的最小數字爲321323。

設計思路

  • 先將整型數組轉換成String數組,然後將String數組排序,最後將排好序的字符串數組拼接出來。關鍵就是制定排序規則。
  • 排序規則如下:
  • 若ab > ba 則 a > b,
  • 若ab < ba 則 a < b,
  • 若ab = ba 則 a = b;
  • 解釋說明:
  • 比如 “3” < “31”但是 “331” > “313”,所以要將二者拼接起來進行比較

Java代碼

package codetest;

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


public class PrintMinNumber {

    /**
     * 輸出最小數字
     * @param numbers
     * @return
     */
    public static String minNumber(int[] numbers){
        if(numbers == null || numbers.length == 0){
            return "";
        }
        int len = numbers.length;

        String[] str = new String[len];
        StringBuffer sb = new StringBuffer();

        //將整數數組元素轉換爲字符串
        for(int i = 0;i < len;i++){
            str[i] = String.valueOf(numbers[i]);
        }

        //重寫Arrays.sort方法,制定排序規則
        Arrays.sort(str,new Comparator<String>() {
            @Override
            public int compare(String s1,String s2){
                String c1 = s1 + s2;
                String c2 = s2 + s1;
                return c1.compareTo(c2);
            }
        });


        for(int i = 0; i < len; i++){
            sb.append(str[i]);
        }
        return sb.toString();

    }
    public static void main(String[] args) {

        int[] numbers = {3,32,321};

        System.out.println(minNumber(numbers));
    }

}

程序運行結果如下:
321323
發佈了101 篇原創文章 · 獲贊 139 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章