剑指Offer45.把数组排成最小的数
题目链接:把数组排成最小的数
思路:对数组进行排序,假设要{x, y}组成最小数,那么通过比较"xy"和"yx"的大小,可以得到最小值,对整个数组按这种比较大小方式进行排序,最好得到的数组就是最小数。(证明见评论讲解)
代码:
class Solution {
public String minNumber(int[] nums) {
List<String> list = new ArrayList<>(nums.length);
for(int n : nums){
list.add(""+n);
}
Collections.sort(list, (a, b)->(a+b).compareTo(b+a));
StringBuilder sb = new StringBuilder();
for(String n : list){
sb.append(n);
}
return sb.toString();
}
}
笔记:
- Arrays.sort(T[])可以传入int[]类型数据进行排序,但是这时无法自定义排序方式,因为在Comparator<>接口中参数必须是类不能是基础变量;当传入是String[]类型数组时,是可以自定义排序,因为数组中的元素是对象,不是基础变量。
- int[]与Integer[]无法进行拆箱装箱。
- 上面代码最好使用String[]对nums[]进行转化,能很好的提高效率18ms -> 7ms。