LeetCode——179. 最大数

题目描述

题干:
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例1:
输入:nums = [10,2]
输出:"210"

示例2:
输入:nums = [10]
输出:"10"

题解思路

返回数组中数字组成的最大数,最大数的问题我们都遇到过,但是这次的亮点在于不是单位的数字组合了

如果{4,42}和{4,45}这两个数组完全就是两个不同的答案了,所以这里我们不能像以前那样简单的排序

我们需要自己定义一种新的比较规则,这里采用lambda表达式来表示新的交换规则,代码如下

正确代码

class Solution {
    public String largestNumber(int[] nums) {
        //转换成String使用compareTo方法
        String[] strNum = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            strNum[i] = String.valueOf(nums[i]);
        }

        //排序规则
        Arrays.sort(strNum, (a, b) -> {
            return (b + a).compareTo(a + b);
        });

        StringBuffer stringBuffer = new StringBuffer();
        for (String s : strNum) {
            stringBuffer.append(s);
        }
        //排除{0,0}的情况
        return stringBuffer.charAt(0) == '0' ? "0" : stringBuffer.toString();
    }
}

总结

思路是很好想到的,主要是实现新的数学比较难以实现,其实这里lambda表达式我不太清楚其含义

因为我学习到的lambda表达式时用来代替匿名内部类来定义新对象的,而这里并没有新的对象产生

如果文章存在问题或者有大牛可以帮我解惑,欢迎在评论区斧正和评论解释,各自努力,你我最高处见
上一篇:[Leetcode]19.把数组排成最小的数


下一篇:考研各大学编程题