跳至主要內容

45-把数组排成最小的数

daipeng小于 1 分钟

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

把数组中的元素排成最小的数字,那么需要有个规则判断元素的先后顺序。

比如 3 32,可以排成 332 323 ,那么显然我们可以判断出来 323 < 332 。

所以 我们可以将两个数字m n 排成mn nm ,判断mn nm的大小,这样对数组排序。

实质上这道题是需要我们找到一个排序的规则。

清楚了排序规则,代码就好写了。

  public String minNumber(int[] nums) {
        if (nums == null || nums.length == 0) {
            return "";
        }
        List<Integer> data = Arrays.stream(nums).boxed().collect(Collectors.toList());
        Collections.sort(data, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return (o1 + "" + o2).compareTo(o2 +""+ o1);      
            }
        });
        StringBuilder sb = new StringBuilder();
        data.forEach( k -> {sb.append(k);});
        return sb.toString();
    }