Given a list of non negative integers, arrange them such that they form the largest number.
给定一个列表的肺腑整数,重新排列他们,使他们拼凑起来后变成最大的数
Example 1:
Input: [10,2]
Output: "210"
Example 2:
Input: [3,30,34,5,9]
Output: "9534330"
Note: The result may be very large, so you need to return a string instead of an integer.
Solution:
Python
from functools import cmp_to_key
class Solution:
def compare(self,x,y):
if x+y > y+x:
return 1
elif x+y < y+x:
return -1
else:
return 0
def largestNumber(self,num):
nums = list(map(str,num))
nums.sort(key = cmp_to_key(self.compare),reverse = True)
return str(int(''.join(nums)))
我的理解是compare函数定义的是一种比较机制,相当于将sort中的比较机制替换了,这里定义的比较是字符串加和后谁大谁小的问题,然后将这个比较的机制传给sort函数,sort函数根据这个比较的机制来比较字符大小。
最后的return原本写成 ‘’.join(nums) 但是这样会报错,出现数组为 [’'0,‘0’] (得出的结果是‘00’),[‘0’] (得出的结果为空),所以先转换成int,再变成str类型。