问题描述:
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
问题分析:
很显然,就判断每个数字谁在最前面,其实就是一个另类排序了。现在假设有两个数字 x,y,单独看这两个数字,谁在前面谁在后面?可以这样比较:str(x) + str(y) > str(y) + str(x)
很显然x
在前,否则 y
在前。
Python3实现:
# @Time :2018/09/11
# @Author :LiuYinxing
# 排序
class compare(str):
def __lt__(x, y):
return x+y > y+x
class Solution:
def largestNumber(self, nums):
largest = sorted([str(v) for v in nums], key=compare) # 排序
largest = ''.join(largest) # 转换字符串
return '0' if largest[0] == '0' else largest # 如果第一个值为0,很显然,后面有的话也是0,直接
if __name__ == '__main__':
solu = Solution()
nums = [3, 30, 34, 5, 9]
print(solu.largestNumber(nums))
声明: 总结学习,有问题可以批评指正,大神可以略过哦。