LeetCode 精选 TOP 面试题(Java 实现)—— 最大数

一、题目描述

1.1 题目
  • 最大数

  • 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。

  • 示例 1:

输入: [10,2]
输出: 210
  • 示例 2:
输入: [3,30,34,5,9]
输出: 9534330
  • 说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
1.2 知识点
  • 排序
1.3 题目链接

二、解题思路

2.1 解题思路

  这道题本质就是一个排序问题,通过排序让数组中的元素拼接后组成一个最大数,因此只需要定义比较器逻辑即可,首先将其转换为字符串数组,然后依次判断相邻的两个字符串的关系,设前后两个字符串分别为 sa 和 sb,如果将其颠倒拼接后的 sb+sa 大于正序的 sa+sb,那么就将其进行位置调换(本质是冒泡排序)。

  需要注意的是当排序完成后如果数组的首位为 0 则说明当前组成的最大整数为零,可以直接忽略后面的其余位(比如对于排序后的结果时 [0, 0] 这种情况),因此直接返回 0 即可。

三、实现代码

3.1 解题实现
class Solution {

    public String largestNumber(int[] nums) {
        
        String[] str = new String[nums.length];
        String ret = "";
        for(int i = 0; i < nums.length; i++)
            str[i] = String.valueOf(nums[i]);

		// 自定义比较器 Comparator
        Arrays.sort(str, new Comparator<String>() {
            public int compare(String sa, String sb){
                return (sb + sa).compareTo(sa + sb);
            }    
        });
        for(String s : str)
            ret += s;

        return ret.charAt(0) == '0' ? "0" : ret;
    }
}
发布了277 篇原创文章 · 获赞 33 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40697071/article/details/103995865