輸入一個非負整數數組,把數組里所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。
示例 1:
輸入: [10,2]
輸出: “102”
示例 2:
輸入: [3,30,34,5,9]
輸出: “3033459”
提示:
- 0 < nums.length <= 100
說明:
- 輸出結果可能非常大,所以你需要返回一個字符串而不是整數
- 拼接起來的數字可能會有前導 0,最后結果不需要去掉前導 0
解題思路
關鍵點就是比大小,將更小的數字放前面,想知道兩個數字a,b哪個數字更小,可以將兩個數字分別放前面組成ab和ba,比較ab和ba哪個更小,就知道哪個應該放在前面可以組成更小的數字。
代碼
class Solution {public String minNumber(int[] nums) {String[] strings = new String[nums.length];for (int i = 0; i < nums.length; i++) {strings[i]= String.valueOf(nums[i]);}Arrays.sort(strings, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return (o1+o2).compareTo(o2+o1);}});StringBuilder builder = new StringBuilder();for (String s : strings) {builder.append(s);}return builder.toString();}
}