LeetCode:179. Largest Number - Python

问题描述:

179. 最大数

给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。

示例 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))

声明: 总结学习,有问题可以批评指正,大神可以略过哦。

猜你喜欢

转载自blog.csdn.net/XX_123_1_RJ/article/details/82632189