题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
<分析>
先把整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接
排序规则如下:
若ab>ba 则a>b
若ab<ba 则a<b
若ab=ab 则a=b
解释说明:
比如"3"<"31" 但是"331">"313",所以要将两者拼接起来进行比较
import java.util.Arrays;
import java.util.Comparator;
/**
*
* @author zy
* @date 2017年10月5日 上午10:36:44
* @Decription 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},
* 则打印出这三个数字能排成的最小数字为321323。
*/
public class Ex22 {
public String PrintMinNumber(int[] numbers) {
if (numbers == null || numbers.length == 0) {
return "";
}
int len = numbers.length;
String[] strings = new String[len];
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strings.length; i++) {
strings[i] = String.valueOf(numbers[i]);
}
Arrays.sort(strings, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String c1 = o1+o2;
String c2 = o2+o1;
return c1.compareTo(c2);
}
});
for (int i = 0; i < strings.length; i++) {
sb.append(strings[i]);
}
return sb.toString();
}
}