179. 最大数

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

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

示例 1:

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

示例 2:

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

错误思路:
我局限于开始字符相同的字符串只有第一位,殊不知,可能不止一位

错误代码:
只过了16 / 230,想的太麻烦了,纯粹自己记录一下自己书写过程

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        n = len(nums)
        strlist = list(map(str, nums))
        strlist.sort(reverse=True)
        res = ''
        i = 0
        temp = 0
        while i < n-1:
            if strlist[i][0] != strlist[i+1][0]:
                res += strlist[i]
                i += 1
            else:
                a = strlist[i][0]
                for j in range(i, n):
                    if len(strlist[j]) == 1 and strlist[j][0] == a:
                        temp += 1
                    elif strlist[j][0] != a:
                        break
                if j == n-1: j += 1 
                for k in range(i, j-temp, 1):
                    if int(strlist[k]) > int(a) * int(len(strlist[k]) * '1'):
                        res += strlist[k]
                    else:
                        res += temp * a
                        break
                res += ''.join(strlist[k:j-temp])
                i = j
        if i <= n-1:
            res += strlist[n-1]
        return ''.join(res)

正确思路:
思路地址
正确代码:

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        strs = map(str, nums)
        def cmp(a, b):
            if a + b == b + a:
                return 0
            elif a + b > b + a:
                return 1
            else:
                return -1
        strs = sorted(strs, key=functools.cmp_to_key(cmp), reverse=True)
        return ''.join(strs) if strs[0] != '0' else '0'
posted @ 2022-05-19 11:04  小Aer  阅读(4)  评论(0编辑  收藏  举报  来源