leetcode第321题把数组排成最小的数,输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3, 321},则打印出这三个数字能排成的最小数字为321323。

先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。

排序规则如下:若ab > ba则a > b,若ab < ba则a < b,若ab = ba则a = b。

解释说明:比如\"3\" < \"31\"但是\"331\" > \"313\",所以要将二者拼接起来进行比较。


import java.util.*;

public class Solution {

    public String PrintMinNumber(int [] numbers) {

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

        for(int i = 0; i < numbers.length; i++){

            strs[i] = \"\" + numbers[i];

        }

        Arrays.sort(strs, new Comparator() {

            public int compare(String a, String b) {

                return (a + b).compareTo(b + a);

            }

        });

        StringBuilder sb = new StringBuilder();

        for(String str : strs){

            sb.append(str);

        }

        return sb.toString();

    }

}