给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。
注意事项
最后的结果可能很大,所以我们返回一个字符串来代替这个整数。
样例
给出 [1, 20, 23, 4, 8]
,返回组合最大的整数应为8423201
。
思路:
找到首数最大的,然后找其次位最大的。于是考虑转为str数组比较
class Solution: """ @param: nums: A list of non negative integers @return: A string """ def largestNumber(self, nums): # write your code here nums_str = [] for i in nums: nums_str.append(str(i)) nums_str.sort() nums_str.reverse() if int(result) == 0: return "0" return result
提交后发现报错,分析,因为字符串数组比较时“98”>"9"但在排序时,应该把9放在"98"前,因此需要自定义一种比较大小函数
九章参考:
class Solution: # @param num: A list of non negative integers # @return: A string def largestNumber(self, num): nums = sorted(num, cmp=lambda x, y: 1 if str(x) + str(y) < str(y) + str(x) else -1) largest = ‘‘.join([str(x) for x in nums]) i, length = 0, len(largest) while i + 1 < length: if largest[i] != ‘0‘: break i += 1 return largest[i:]
lambda 嵌入到其他函数中的匿名函数,重新定义了sorted的比较方式,写法清晰明了