今天我们来做一道LeetCode上的题目,原题链接:剑指 Offer 45. 把数组排成最小的数
题目描述
- 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
- 示例 1:
输入: [10,2]
输出: "102"
- 示例 2:
输入: [3,30,34,5,9]
输出: "3033459"
- 提示:
0 < nums.length <= 100
- 说明:
输出结果可能非常大,所以你需要返回一个字符串而不是整数
拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
思路分析
- 边界处理:if len(nums) == 1: return ''.join(nums)
- 通用处理:
- 冒泡排序
- 对比策略:if int(nums[i] + nums[j]) > int(nums[j] + nums[i]):冒泡交换
代码
# Python
class Solution(object):
def minNumber(self, nums):
"""
:type nums: List[int]
:rtype: str
"""
nums = [str(i) for i in nums]
if len(nums) == 1: return ''.join(nums)
for i in range(0, len(nums)):
for j in range(i + 1, len(nums)):
if int(nums[i] + nums[j]) > int(nums[j] + nums[i]):
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
return ''.join(nums)
总结
- 优化性能可以参考快排思路
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情