题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
一开始我也以为是一个全排列的问题,后来看了下剑指offer发现作者有一个更好的实现方式。

代码
public class Solution32 {
public String PrintMinNumber(int[] numbers) {
if (null == numbers || numbers.length == 0)
return "";
StringBuilder s = new StringBuilder();
ArrayList<Integer> list = new ArrayList<>();
for (int number : numbers) {
list.add(number);
}
list.sort((str1, str2) -> {
String s1 = String.valueOf(str1) + String.valueOf(str2);
String s2 = String.valueOf(str2) + String.valueOf(str1);
return s1.compareTo(s2);
});
for (int j : list) {
s.append(j);
}
return s.toString();
}
public static void main(String[] args) {
int arr[] = {0, 0, 14, 61, 2, 13, 32, 99, 81};
BeanUtil.printStr(new Solution32().PrintMinNumber(arr));
}
}
本文介绍了一种高效算法,用于将数组中的数字拼接成最小可能的数值。通过自定义排序规则,确保数字组合得到的序列最小。该算法避免了全排列的复杂度,提供了一个简洁的解决方案。
938

被折叠的 条评论
为什么被折叠?



