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,因此需要进行变化:
    跳转链接

你可能感兴趣的:(算法,leetcode,python)