zoukankan      html  css  js  c++  java
  • [LeetCode] 179. 最大数

    题目链接: https://leetcode-cn.com/problems/largest-number/

    题目描述:

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

    示例:

    示例 1:

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

    示例 2:

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

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

    思路:

    自定义排序规则

    1. 使用cmp_to_key
    2. 类的魔法方法

    详细可以看我写的关于 Python排序总结


    n为数组长度

    k为数字字符串的平均长度

    因为排序时间复杂度 nlogn

    有因为字符串之间也要比较,所以时间复杂度为 (knlogn)

    空间复杂度:(O(n))

    代码:

    使用cmp_to_key

    class Solution:
        def largestNumber(self, nums: List[int]) -> str:
            from functools import cmp_to_key
            def helper(x, y):
                if x + y > y + x:
                    return -1
                elif x + y < y + x:
                    return 1
                else:
                    return 0
    
            return "".join(sorted(map(str, nums), key=cmp_to_key(helper))).lstrip("0") or "0"
    

    类的魔法方法,两种写法

    写法一:

    class Solution:
        def largestNumber(self, nums: List[int]) -> str:
            class cmp_large:
                def __init__(self, num):
                    self.num = str(num)
    
                def __lt__(self, other):
                    return self.num + other.num > other.num + self.num
    
                def __gt__(self, other):
                    return self.num + other.num < other.num + self.num
    
                def __eq__(self, other):
                    return self.num + other.num == other.num + self.num
    
            nums = [cmp_large(num) for num in nums]
            return "".join(a.num for a in sorted(nums)).lstrip("0") or "0"
    

    写法二:

    class Solution:
        def largestNumber(self, nums: List[int]) -> str:
            class large_num(str):
                def __lt__(self, other):
                    return self + other > other + self
            return "".join(sorted(map(str, nums), key=large_num)).lstrip("0") or "0"
    
  • 相关阅读:
    SQL Server的全局变量
    SQL局部变量
    视图和表之间的区别和联系
    SQL Server中开发常用的数据类型
    Bootstrap 字体图标、下拉菜单、按钮组
    Bootstrap 按钮,图片,辅助类
    Bootstrap表单
    Bootstrap表格
    Bootstrap排版类
    Bootstrap网格系统
  • 原文地址:https://www.cnblogs.com/powercai/p/11354822.html
Copyright © 2011-2022 走看看