题目链接
给定一组非负整数 nums
,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
输入nums = [3,30,34,5,9]
输出:"9534330"
一开始我用自定义排序方法来解题
from functools import cmp_to_key
class Solution:
def largestNumber(self, nums) :
def sort_way(x, y):
if x+y>y+x:return -1
else :
return 1
nums_str = list(map(str,nums))
nums_str.sort(key=cmp_to_key(sort_way))
if nums_str[0] == '0':
res = '0'
else:res=''.join(nums_str)
return res
首先明白python中字符串的大小比较原理 ,他是一位一位的比较的,不管长度。
如"2568">"2499" 因为5>4
如“5”>"19999"因为5>1
字符串的这种比较方式刚好符合题目要求
自定义一个sort_way(x, y)根据传入的字符进行拼接并计较,需要注意的是cmp_to_key是根据正负数来决定是否交换的,即 sort_way 返回-1则不交换,1则交换
容易踩坑的地方:如果 输入的列表是[0,0] 那么他预期的结果应该是“0” 所以我们return之前先判断一下结果如果是0开头的就让结果等于一个“0”(有数字的话排序后一定会在0之前,所以排序后0作为开头代表nums里面全是0)