题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
import java.util.ArrayList;
public class Solution {
public String PrintMinNumber(int [] numbers) {
}
}
解题思路
- 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。
- 关键是利用好 Comparator 制定排序规则。
public class Solution {
public String PrintMinNumber(int [] numbers) {
if (numbers.length==0 || numbers == null){
return "";
}
int n = numbers.length;
StringBuilder sb = new StringBuilder();
String[] str = new String[n];
for (int i = 0; i < n; i++) {
str[i] = String.valueOf(numbers[i]);
}
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String t1, String t2) {
String s1 = t1 + t2;
String s2 = t2 + t1;
return s1.compareTo(s2);
}
});
for (int i = 0; i < n; i++) {
sb.append(str[i]);
}
return sb.toString();
}
}