[剑指 Offer 45. 把数组排成最小的数] | 刷题打卡

130 阅读1分钟

今天我们来做一道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 春招闯关活动」, 点击查看 活动详情