题目描述
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入: nums = [10,2]
输出: "210"
示例 2:
输入: nums = [3,30,34,5,9]
输出: "9534330"
示例 3:
输入: nums = [1]
输出: "1"
示例 4:
输入: nums = [10]
输出: "10"
提示:
1 <= nums.length <= 1000 <= nums[i] <= 109
解题思路
本题要求我们重新排列输入输入中数字的顺序,使其拼接后的数字最大。
这里我们先思考只有两个数字的时候,如何判断先后顺序呢?
我们可以比较 a 拼接 b 的结果和 b 拼接 a 的结果哪个更大,如果前者更大,则应该让 a 在 b 的前面,反之则应该让 b 在 a 的前面。
基于以上思考,我们可以把它作为排序的规则,然后利用 sort 排序排序输入数组。
数组排序后我们通过 join 方法获取数字拼接后的字符串即可。\
代码实现
var largestNumber = function(nums) {
nums.sort((x,y)=>{
console.log(x,y)
let sx = 10, sy = 10;
while(sx <= x){
sx *= 10;
}
while(sy <= y){
sy *= 10;
}
return '' + (sx * y + x) - ('' + (sy * x + y));
})
if(nums[0] === 0){
return '0';
}
return nums.join('');
};
至此我们就完成了 leetcode-179-最大数