一、题目
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

二、思路
要想组成最大的整数,一种直观的想法是把数值大的数放在高位。
于是我们可以比较输入数组的每个元素的最高位,最高位相同的时候比较次高位,以此类推,完成排序,然后把它们拼接起来。这种排序方式对于输入数组 没有相同数字开头 的时候是有效的;
三、实现
function largestNum(nums){
nums.sort((x,y)=>{
let sx = 10, sy = 10;
while(sx<=x){ //记录放到数字x前,需要左移多少
sx *= 10;
}
while(sy<=y){ //记录放到数字y前,需要左移多少
sy *= 10;
}
// y放到x前组成的数字 - x放到y前组成的数字
return (sx*y+x) - (sy*x+y)
})
if(nums[0]===0){
return "0";
}
return nums.join("");
}
let arr = [3,30,34,5,19]
console.log(largestNum(arr)); //53433019

本文介绍了一种将非负整数数组重新排列以形成最大整数的算法。通过比较数组中每个元素的高位来实现排序,并详细解释了排序方法及其实现过程。
&spm=1001.2101.3001.5002&articleId=120442394&d=1&t=3&u=92ca9acebcdf4d02bba48b3c1a490cd8)
728

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



