题目链接:https://leetcode.com/problems/largest-number/
要求数组字符串组成的数组按某个顺序组成的数字尽可能大,首先是要把尽可能大的数放在前面,再利用java自带的排序算法时我们要定义清楚什么样的数比较大?因为这里的大不是原本默认的数字字符串的数值意义上的大了,而是放在较高位上时使得组成的数字字符串在数值意义上较大。
举两个例子:
"3"和"32"哪一个较大,或者说哪一个应该放在较高位上,显然是"3",因为"332"比"323"要来的大,所以"3"比"32"要大。
''121" 和"12","12112"比"12121"来的小,所以''121"比"12"小。
理解了真正的大,现在就可以顺畅的写代码了:
class Solution {
public static class StringComparator implements Comparator<String>
{
public int compare(String o1, String o2)
{
String a=o1+o2;
String b=o2+o1;
return a.compareTo(b);
}
}
/*
[824,938,1399,5607,6973,5703,9609,4398,8247]
1399,4398,5607,5703,6973,8247,824,938,9609,
*/
public String largestNumber(int[] nums) {
int j=0;
while(j<nums.length && nums[j]==0)
j++;
if(nums.length==j)
return "0";
String[] strs=new String[nums.length];
for(int i=0;i<nums.length;i++)
strs[i]=String.valueOf(nums[i]);
Arrays.sort(strs,new StringComparator());
StringBuilder sb=new StringBuilder();
for(int i=nums.length-1;i>=0;i--)
sb.append(strs[i]);
return sb.toString();
}
}
这里要规避一个corner case,就是全是0时输出的应该是"0",而不是多个0的“000”。
本文解析LeetCode上的Largest Number题目,介绍如何通过自定义排序算法将整数数组重新排列,形成最大的可能数字。文章详细解释了比较规则,并提供Java实现代码,包括处理全零输入的特殊情况。
402

被折叠的 条评论
为什么被折叠?



