leetcode_179 最大数

184 阅读1分钟

要求

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例 1:

输入:nums = [10,2]
输出:"210"

示例 2:

输入:nums = [3,30,34,5,9]
输出:"9534330"

示例 3:

输入:nums = [1]
输出:"1"

示例 4:

输入:nums = [10]
输出:"10"

核心代码

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        s = ""
        for a in range(len(nums) - 1):
            for b in range(a + 1,len(nums)):
                if int(str(nums[a]) + str(nums[b])) < int(str(nums[b]) + str(nums[a])):
                    nums[a],nums[b] = nums[b],nums[a]
        for x in nums:
            s += str(x)
        return str(int(s))

image.png

解题思路:我们通过[9, 30, 3, 34, 5], [9, 5, 30, 3, 34] [9, 5, 34, 30, 3] [9, 5, 34, 3, 30]的可以看出我们每次我们都是将首位最大的值,调整到最前面,当字符串首位相同的时候,第二位大的说了算,所以经过了我们的排序之后,我们最终拼接出来的字符串最大。