题目:
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/largest-number/solution/zui-da-shu-by-leetcode-solution-sid5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
思路:
排序法:
给我们的是一个数组,如果我们能对这个数组进行排序,使得前面的“大于”后面的数,然后变成字符串就OK了;
理解这个“大于”是关键,对于数组中的任意两个数a,b,如果
“ab”>“ba”;则a>b,这个“ab”表示a和b直接拼接成字符串。
答案:
public static String largestNumber(int[] nums) {
int n=nums.length;
Integer[] newArr = new Integer[n];
for (int i = 0 ;i<n;i++) newArr[i]=nums[i];
Arrays.sort(newArr,(a, b)->{
long sa=10,sb=10; //10^a和b数的长度;
while (sa<=a){
sa*=10;
}
while (sb<=b){
sb*=10;
}
return (int) -((a*sb+b)-(b*sa+a));
});
if (newArr[0]==0){
return "0";
}
StringBuilder ret = new StringBuilder();
for (int num : newArr) {
ret.append(num);
}
return ret.toString();
}