【题目描述】
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
时间限制:1秒 空间限制:32768K 热度指数:237731
本题知识点: 数组
【解题思路】
需要的考虑的两个问题:
- 带比较器的排序 - 自定义比较规则
- 隐含的大数问题 - 将int数组转为字符串
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Arrays;
public class Solution {
String mn = "";
String nm = "";
// 22ms 9676K
// 考察点:1、隐含的大数问题; 2.定义比较规则
public String PrintMinNumber(int [] numbers) {
if(numbers.length == 0)
return "";
// 将int数组转换成String数组
String[] strs = new String[numbers.length];
for(int i = 0; i < numbers.length; i++){
strs[i] = String.valueOf(numbers[i]);
}
// 按照MinComprator定义的规则对strs进行升序排序
Arrays.sort(strs, new MinComparator());
// 字符串拼接
StringBuilder sb = new StringBuilder();
for(int i = 0; i < numbers.length; i++){
sb.append(strs[i]);
}
return sb.toString();
}
private class MinComparator implements Comparator<String> {
@Override
public int compare(String str1, String str2){
mn = str1 + str2;
nm = str2 + str1;
return mn.compareTo(nm);
}
}
}