「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」
179. 最大数
给定一组非负整数 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
排序
思路 由题目可知,我们需要对给定的数组nums中的元素进行排序,使得最后所有元素按照排列顺序拼接在一起的数字是最大的数字。
很明显对于个位数的话我们肯定是希望越大的数字越靠前,因此我们需要按照一下规律进行排序
- 首先获取这个数字的最左侧的数字,这里我们通过转为字符串获取第0位来获取,我们记为p
- 两个数字不相等,直接让大的排在前面
- 如果相等,我们就需要去获取第2位数字继续进行比较,直到末尾
可是,如果比较的两个数字的长度不一致,前几位数字完全文和要怎么处理呢?
这个时候我们会惊喜的发现,这不就是两个数字你前我后进行组合,只有两种情况,比较两者的值即可,这不就完了吗?
于是我们直接用sort进行排序,排序规则就是获取两个数字a和b的两种组合结果,res1(a靠前)和res(b靠前)
因为我们要求最大的数字,所以我们这里需要一个降序排序
- 组合结果大的往前,如果res1大,那就不要排序,返回一个负值即可
- 组合结果小的往后,如果res2大,那么就需要交换a,b的位置,返回一个正值即可
- 组合结果不变的,无需处理,返回0
因此我们直接返回res2-res1即可得到正确结果
最后我们将nums用join方法,用引号''将每一位元素拼接成字符串返回即可
var largestNumber = function (nums) {
// 开始排序
nums.sort((a, b) => {
var strA = a.toString()
var strB = b.toString()
var res1 = parseInt(strA + strB)
var res2 = parseInt(strB + strA)
return res2 - res1
})
var res = nums.join('')
if (res[0] === '0') {
return '0'
}
return res
};