最大数_字符串拼接

题目链接

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

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

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

179. 最大数 - 力扣(Leetcode)

一开始我用自定义排序方法来解题

from functools import cmp_to_key


class Solution:
    def largestNumber(self, nums) :
        def sort_way(x, y):
            if x+y>y+x:return -1
            else :
                
                 return 1


        nums_str = list(map(str,nums))
        nums_str.sort(key=cmp_to_key(sort_way))
        if nums_str[0] == '0':
            res = '0'
        else:res=''.join(nums_str)
        return res

首先明白python中字符串的大小比较原理 ,他是一位一位的比较的,不管长度。

如"2568">"2499" 因为5>4

如“5”>"19999"因为5>1

字符串的这种比较方式刚好符合题目要求

自定义一个sort_way(x, y)根据传入的字符进行拼接并计较,需要注意的是cmp_to_key是根据正负数来决定是否交换的,即 sort_way 返回-1则不交换,1则交换

容易踩坑的地方:如果 输入的列表是[0,0] 那么他预期的结果应该是“0” 所以我们return之前先判断一下结果如果是0开头的就让结果等于一个“0”(有数字的话排序后一定会在0之前,所以排序后0作为开头代表nums里面全是0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值