• leetcode 179. 最大数 解题报告


    给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。

    示例 1:

    输入: [10,2]
    输出: 210
    

    示例 2:

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

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

    这道题目非常有意思。读完题之后,我们可以得到一个初步的方案:由于无论怎么排,最佳的方案肯定是会把所有的数字全部用上。所以,如果字典序越大的,得到的数值也会越大。只需要尽可能的让字典序大的数字处于尽可能高的位置即可。那么一个初步的实现方案如下

    class Solution:
        def largestNumber(self, nums):
            """
            :type nums: List[int]
            :rtype: str
            """
            result = ''.join(sorted(map(str, nums), reverse=True))
            return result
    

    看起来不错,但是却无法通过该题的所有测试。下面给出一个反例,['30', '3'],排序之后得到的是’303‘而不是’330‘。受此启发,我们假设有两个字符串a,b。我们只要判断a+b大还是b+a大,大的排在前面即可。那么刚刚我们的反例可以顺利通过了。

    于是,一个可以通过所有测试样例的代码便有了

    from functools import cmp_to_key
    
    
    def cmp(a, b):
        if a + b > b + a:
            return 1
        elif a + b < b + a:
            return -1
        else:
            return 0
    
    
    
    
    class Solution:
        def largestNumber(self, nums):
            """
            :type nums: List[int]
            :rtype: str
            """
            result = ''.join(sorted(map(str, nums), key=cmp_to_key(cmp), reverse=True))
            return result[:-1].lstrip('0') + result[-1]
    
    

    这里涉及到了Python3 sorted函数自定义比较函数的知识点,在Python3中,sorted方法撤销掉了原有的cmp参数,所以要进行这样的排序操作更加复杂了。有关此知识点的更加详尽的说明请查阅相关文档。

  • 相关阅读:
    URAL 2014 Zhenya moves from parents 线段树
    git 安装及命令
    在eclipse中执行sql
    在eclipse中配置server和database
    java的regex问题笔记
    在开发中写一些tool来提升自己的效率
    在Eclipse中给JRE-Library添加本地Javadoc
    利用eclipse中的各种功能帮助你理解代码
    Eclipse中直接操作本地文件系统
    form action中如何填写相对目录
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/10199649.html
Copyright © 2020-2023  润新知