题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
这里使用的是一个比较器的方法,也就是我要得到的是一个最小的数字,我们可以把数拼接成一个字符串。然后分别去比较,具体的是两两数拼接比较,将形成的数小的数放在前面。
实现:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
public String PrintMinNumber(int [] numbers) {
int length = numbers.length;
StringBuilder build = new StringBuilder();
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < length; i ++){
list.add(numbers[i]);
}
Collections.sort(list, new Comparator<Integer>(){
@Override
public int compare(Integer str1, Integer str2){
String s1 = str1 + "" + str2;
String s2 = str2 + "" + str1;
//后一个数在前,形成的数越大,那么这个a为整数,不用交换,后一个数在前面值越大,那么就不用交换位置
//后一个数在前,形成的数越小,说面这个后一个数的高位小于前一个数在前,此时后一个数比较后返回负数,则交换位置
return s1.compareTo(s2);
}
});
for(int j : list){
build.append(j);
}
return build.toString();
}
}