题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:找到数组中数的排列顺序,任意一个子序列都满足S1+S2<S2+S1的规律,因为若某两个数不满足,那么调换两个数的顺序,生成的新的数字必然比之前的数要更小。
public class Q_32 {
public String PrintMinNumber(int[] numbers) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < numbers.length; i++) {
list.add(numbers[i]);
}
Collections.sort(list, (a, b) -> {
return (a + "" + b).compareTo(b + "" + a);
});
String result = "";
for (int s : list) {
result += s;
}
return result;
}
public static void main(String[] args) {
int[] arr = {3, 32, 321};
System.out.println(new Q_32().PrintMinNumber(arr));
}}

京公网安备 11010502036488号