Loading

剑指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。
posted @ 2020-12-26 16:58  yoyuLiu  阅读(60)  评论(0编辑  收藏  举报