
leetcode题解179-最大数
发布日期:2025-04-05 05:20:07
浏览次数:10
分类:精选文章
本文共 1923 字,大约阅读时间需要 6 分钟。
将给定的非负整数重新排列,每个数字不可拆分,使得整体组成一个最大的整数。为了实现这一目标,可以按照自定义的字符串比较规则对数字进行排序,然后将排序后的数字拼接成结果字符串。以下是详细步骤说明:
解题思路
问题分析:
- 给定一个整数数组
nums
,目标是重新排列这些数字,使得它们拼接后的字符串值最大。 - 最大的整数可以通过字符串排序来实现,每个数字作为独立的字符串进行比较。
字符串比较规则:
- 对于两个数字
x
和y
,将它们转换为字符串sx
和sy
。 - 比较
sx + sy
和sy + sx
的大小。 - 如果
sx + sy
大于sy + sx
,则x
应该放在y
前面;否则,y
应该放在x
前面。
边界情况处理:
- 如果所有数字都为零,直接返回字符串 "0"。
- 否则,使用自定义排序规则对数字排序。
具体实现:
- 将数组中的每个数字转换为字符串。
- 使用自定义比较器对字符串数组进行排序。
- 拼接排序后的字符串结果。
解决代码
import java.util.Arrays;import java.util.Comparator;public class Solution { public String largestNumber(int[] nums) { if (nums.length == 0) { return "0"; } Integer[] onums = new Integer[nums.length]; for (int i = 0; i < nums.length; i++) { onums[i] = nums[i]; } Arrays.sort(onums, new Comparator() { @Override public int compare(Integer x, Integer y) { String sx = String.valueOf(x); String sy = String.valueOf(y); String xy = sx + sy; String yx = sy + sx; for (int i = 0; i < Math.min(xy.length(), yx.length()); i++) { int a = xy.charAt(i) - '0'; int b = yx.charAt(i) - '0'; if (a > b) { return -1; } else if (a < b) { return 1; } } return 0; } }); StringBuilder sb = new StringBuilder(); for (Integer num : onums) { sb.append(String.valueOf(num)); } return sb.toString(); }}
代码解释
- 定义类
Solution
:包含使用@Override
注解定义的largestNumber
方法。 - 处理空数组情况:如果
nums
为空,直接返回 "0"。 - 转换数组元素:将
nums
数组中的每个整数转换为Integer
对象,存储在onums
数组中。 - 自定义排序:使用
Arrays.sort
方法对onums
数组进行排序,自定义比较逻辑:- 将每个数字转换为字符串。
- 比较两个字符串拼接的结果,决定排序顺序。
- 拼接结果字符串:使用
StringBuilder
逐个拼接排序后的数字字符串,构造最终结果字符串。
该解决方案通过自定义的字符串拼接比较规则,确保了在最坏情况下也能高效地找到最大的排列,适用于非常大的整数范围。
发表评论
最新留言
不错!
[***.144.177.141]2025年05月04日 19时55分10秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
LeetCode数据库题目汇总二(附答案)
2025-04-05
LeetCode新手指南:从零开始掌握算法挑战
2025-04-05
LeetCode智加科技专场——第207场周赛题解
2025-04-05
leetcode正则表达式匹配
2025-04-05
leetcode第40题:组合总和II
2025-04-05
leetcode算法题解(Java版)-6-链表,字符串
2025-04-05
LeetCode经典——202.快慢指针之快乐数
2025-04-05
LeetCode经典——70.爬楼梯&&509.斐波拉契数列
2025-04-05
Leetcode经典系列——LRU最近最少使用机制
2025-04-05
LeetCode美团专场——第203场周赛题解
2025-04-05
LeetCode蔚来专场——第208场周赛题解
2025-04-05
leetcode题解-买卖股票的最佳时机
2025-04-05
leetcode题解102-二叉树的层序遍历
2025-04-05
leetcode题解102-翻转二叉树
2025-04-05
leetcode题解104- 二叉树的最大深度
2025-04-05
leetcode题解108-将有序数组转换为二叉排序树
2025-04-05
leetcode题解118-杨辉三角
2025-04-05
leetcode题解131-分割回文串
2025-04-05
leetcode题解136-只出现一次的数字
2025-04-05
leetcode题解14-最长公共前缀
2025-04-05