LeetCode-最大数

164 阅读1分钟

题目

本题是2021.04.12日的每日一题

链接:leetcode-cn.com/problems/la…

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

题解

这是一个中等难度的题,题目要求的是将数组中的数组合成一个最大的整数,其实就是将数据元素拼成字符串,这个字符串所代表的数字最大即可

所以首先想到的就是需要对这个数组排序,对于数字a和b,如何确定a小还是b小呢?(这里的小不代表数值大小),只需要满足题目要求即可,题目要求拼接成最大的整数,所以这里拼接ab和ba,比较ab和ba的大小即可。

class Solution {
    public String largestNumber(int[] nums) {
        if(nums == null || nums.length == 0) {
            return "";
        }
        String[] temp = new String[nums.length];
        for(int i = 0;i< nums.length;i++){
            temp[i] = String.valueOf(nums[i]);
        }
        Arrays.sort(temp, (o1, o2) -> {
            String temp1 = o1 + o2;
            String temp2 = o2 + o1;
            return temp2.compareTo(temp1);
        });
        if("0".equals(temp[0])) {
            return "0";
        }
        StringBuilder sb = new StringBuilder();
        for(int i = 0;i<nums.length;i++) {
            sb.append(temp[i]);
        }
        return sb.toString();
    }
}