LeetCode刷题(每日一题) --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 <= 100
0 <= nums[i] <= 109

解答

思路

  • 主要是转战python
  • 首先对于题目的一个解释:核心点就是怎么判断两个数的最佳组合
first = "33"
second = "4"

比如在这里,明显“433"的组合值大于”334“

  • 所以参考了官方题解:这里可以定义一个判断函数,之后将所有的数进行排序,最后直接拼接返回正确答案。
def cmp(a, b):
    if a + b == b + a:
        return 0
    elif a + b > b + a:
        return 1
    else:
        return -1

代码

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)
        print(strs)
        return ''.join(strs) if strs[0] != '0' else '0'

主要知识点

  • map函数的使用,map(fun,data),将data中的数依次使用fun函数,最后返回一个列表。特别的,fun可以使用lambda表达式
  • sorted,sort函数的使用:首先两个的区别1)sorted会返回排序后的新列表,2)sort直接对原数据进行排序,无返回值。除此之外,主要是判断函数的使用,functools.cmp_to_key(func),python中的sorted将cmp_func变成了key,因此需要进行变化:
    跳转链接
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hanzoe_lwh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值