leetcode 179. Largest Number (medium)

179. Largest Number
题目描述

Given a list of non negative integers, arrange them such that they form the largest number.

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.

解题思路

判断数字要注意类似00123这样起始是0的数字.

需要把能使得组合数字高位数尽量大的数排到前面, 因此想到可以使用冒泡排序法, 比较好理解, 比较大小的方式就是比较两个数的组合, 如12和34, 得到1234, 3412, 由于12排前面使得组合变小, 因此12需要往后排, 34往前排.

经过一轮比较, 每次排前都使得组合数小的数就到了数组最后, 比如12每次和其他数组合, 12排前面都会得到小的结果, 那么一轮之后12就到了末尾. 原理和冒泡法一样.

注意考虑特殊情况, 所有元素都相等的情况. 其中存在所有数都为0的情况, 输出不能使0000而是0.

换成其他高效的排序算法, 也可以. 本题核心就是 如何比较大小.

代码
Python

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        if len(nums) == 0:
            return ""
        if len(nums) == 1:
            return str(nums[0])
        # 存在000000这种特殊情况
        if max(nums) == min(nums):
            if nums[0] == 0:
                return "0"
            else:
                return str(nums[0])*len(nums)
            
        # 用冒泡排序
        # 比较规则
        for i in range(len(nums)-1):
            for j in range(len(nums)-1-i):
                if str(nums[j])+str(nums[j+1]) < str(nums[j+1])+str(nums[j]):
                    nums[j], nums[j+1] = nums[j+1], nums[j]
        return "".join([str(_) for _ in nums])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值