[路飞]_leetcode-179-最大数

155 阅读1分钟

题目描述

[题目地址]

给定一组非负整数 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 <= 100
  • 0 <= nums[i] <= 109

解题思路

本题要求我们重新排列输入输入中数字的顺序,使其拼接后的数字最大。
这里我们先思考只有两个数字的时候,如何判断先后顺序呢?
我们可以比较 a 拼接 b 的结果和 b 拼接 a 的结果哪个更大,如果前者更大,则应该让 ab 的前面,反之则应该让 ba 的前面。
基于以上思考,我们可以把它作为排序的规则,然后利用 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-最大数