题解 | #把数组排成最小的数#

把数组排成最小的数

https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param numbers int整型一维数组 
# @return string字符串
#
class Solution:
    # 
    def adjust_heap(self, nums, pos, length):
        dad = pos
        son = 2 * pos + 1
        while son < length:
            # 先比较儿子 排序条件比较特殊
            if son + 1 < length and str(nums[son]) + str(nums[son+1]) < str(nums[son + 1]) + str(nums[son]):
                son += 1
            # 比较父亲和最小的儿子
            if str(nums[dad]) + str(nums[son]) < str(nums[son]) + str(nums[dad]):
                nums[dad], nums[son] = nums[son], nums[dad]
                dad = son
                son = 2 * dad + 1
            else:
                break
    def heap(self, nums):
        n = len(nums)
        # 从堆中间开始构建大顶堆
        for i in range(n//2-1,-1,-1):
            self.adjust_heap(nums,i,n)
        # 交换 然后继续调整堆
        for j in range(n-1,-1,-1):
            nums[0], nums[j] = nums[j], nums[0]
            self.adjust_heap(nums, 0, j)
    def PrintMinNumber(self , numbers) -> str:
        if not numbers:
            return ''
        self.heap(numbers)
        numbers = list(map(str, numbers))
        print(numbers)
        return ''.join(numbers)

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务