输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
import java.util.*;
/*
* 解题思路:
* 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。
* 排序规则如下:
* 若ab > ba 则 a > b,
* 若ab < ba 则 a < b,
* 若ab = ba 则 a = b;
* 解释说明:
* 比如 "3" < "31"但是 "331" > "313",所以要将二者拼接起来进行比较
*/
public class Solution {
public String PrintMinNumber(int [] numbers) {
if(numbers==null||numbers.length<1){
return "";
}
int len=numbers.length;
//将数组元素转换为字符串数组中的元素,即用字符串表示数字,应对大数溢出问题
String[] str=new String[len];
for(int i=0;i<len;i++){
str[i]=String.valueOf(numbers[i]);
}
Arrays.sort(str,new Comparator<String>(){
@Override
public int compare(String c1,String c2){
return (c1+c2).compareTo(c2+c1);
}
});
StringBuilder builder=new StringBuilder();
for(int i=0;i<len;i++){
builder.append(str[i]);
}
return builder.toString();
}
}