剑指 Offer 45. 把数组排成最小的数


剑指 Offer 45. 把数组排成最小的数

解题思路

此题求拼接起来的最小数字,本质上是一个排序问题。设数组 numsnums 中任意两数字的字符串为 x 和 y ,则规定 排序判断规则 为:

  • 若拼接字符串 x + y > y + x,则 x“大于” y ;
  • 反之,若 x + y < y + x,则 y“小于” x;

x “小于” y代表:排序完成后,数组中 x应在 y左边;“大于” 则反之。

在这里插入图片描述

代码

class Solution {
    public String minNumber(int[] nums) {
        String[] strs = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            strs[i] = String.valueOf(nums[i]);
        }
        /*
        Arrays.sort()是某比较方法的结果,如果返回结果>0就交换两个元素,<0就不交换
        比如X+y>y+x,那么证明x“大于”y,也就是说排序后x应该在y的右边,也即交换了x,y的位置
         */

        Arrays.sort(strs, (x, y) -> {
            // x+y 和 y+x 比大小
            return (x + y).compareTo(y + x);
        });
        StringBuilder res = new StringBuilder();
        for (String s : strs) {
            res.append(s);
        }

        return res.toString();
    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录