题目描述
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:“210”
示例 2:输入:nums = [3,30,34,5,9]
输出:“9534330”提示:
1 <= nums.length <= 100
0 <= nums[i] <= 109
做题思路
这个题目有一种很巧妙的方式来求解
重要的思路就是:自己构造排序
首先肯定是:从高位往地位依次比较,大的数放在前面
那么如果遇到 445 443
或者遇到 3 35
就类似这种的话我们在比较的时候如果单独处理每种情况的话就很麻烦,
有一种巧妙的方法:就是将待比较的两个数转换成字符串相加,
然后在转换成long类型,最后两个数相减就能比较出大小了
这里我们可以使用数组配合Arrays.sort(),以及自定义比较器实现这个方案
代码实现
class Solution {
public String largestNumber(int[] nums) {
int len=nums.length;
Integer[] res=new Integer[len];
for(int i=0;i<len;i++){
res[i]=nums[i];
}
Arrays.sort(res,(x,y)->{
long n1=Long.parseLong(x.toString() + y.toString());
long n2=Long.parseLong(y.toString() + x.toString());
return (int)(n2-n1);
});
if(res[0]==0){
return "0";
}
StringBuilder sb=new StringBuilder();
for(int i:res){
sb.append(i);
}
return sb.toString();
}
}