题目
给定一组非负整数 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,因此需要进行变化:
跳转链接