面试代码题记录3-leetcode179-最大数

16 篇文章 0 订阅
13 篇文章 0 订阅

https://leetcode-cn.com/problems/largest-number/
给定一组非负整数 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

代码:

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        strs = list(map(str, nums))  # 将列表中的int转换成str,用于判断int(x+y)和int(y+x)的大小
        strs.sort(key = functools.cmp_to_key(lambda x, y: int(x+y) - int(y+x)), reverse = True)
        return ''.join(strs[i] for i in range(len(strs))) if strs[0] != '0' else '0'

1、int数组转换成str数组,为了判断字符串拼接成的整数int(x+y),int(y+x)大小

2、sort排序
strs.sort(key = functools.cmp_to_key(lambda x, y: int(x+y) - int(y+x)), reverse = True)

reverse=true,由大至小进行排列
key = functools.cmp_to_key(lambda x, y: int(x+y) - int(y+x))
这个sort的key会按照拼接后的x+y更大的规则来对strs进行排列

3 输出的时候判断是不是0,如果是[0,0],排序完成为‘00’,输出需要只保留一个0

补充sort函数
list.sort(key=None, reverse=False)
1、key函数
默认按照key值从小到大排列

def compare(a):
    return len(a)

list.sort(key=compare)
# 输入
list = ['aa', 'bbb', 'cccc', 'd']
# 输出
['d', 'aa', 'bbb', 'cccc']

键函数是接受一个参数并返回另一个值作为排序键的可调用对象。

2、cmp函数

def cmp(a, b):
    if a + b == b + a:
        return 0
    elif a + b > b + a:
        return 1
    else:
        return -1

比较函数是任何接受两个参数并进行比较的可调用对象,小于返回负数,相等返回零,大于返回正数。

3、 functools.cmp_to_key
cmp_to_key()是将比较函数(comparison function)转化为关键字函数(key function)。

补充lambda函数
语法
lambda 参数列表:表达式
一个函数只有一个返回值,并且只有一句代码,使用lambda进行简化
lambda x, y: int(x+y) - int(y+x)
相当于

def fun(x, y):
    return int(x+y) - int(y+x)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值