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)