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])