题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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();
}
}