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();
}
}
暂无评论