python--剑指offer--45.把数组排成最小的数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from typing import List


class Solution:
    def fast_sort(self, l, r):
        if l < r:
            l_ = self.fast_sort_(l, r)
            self.fast_sort(l, l_ - 1)
            self.fast_sort(l_ + 1, r)

    def fast_sort_(self, l, r):
        l_, r_ = l, r
        x = self.nums[l_]
        while l_ < r_:
            while l_ < r_ and f'{x}{self.nums[r_]}' <= f'{self.nums[r_]}{x}':
                r_ -= 1
            if l_ < r_:
                self.nums[l_] = self.nums[r_]
                l_ += 1

            while l_ < r_ and f'{self.nums[l_]}{x}' <= f'{x}{self.nums[l_]}':
                l_ += 1
            if l_ < r_:
                self.nums[r_] = self.nums[l_]
                r_ -= 1

        self.nums[l_] = x
        return l_

    def minNumber(self, nums: List[int]) -> str:
        self.nums = nums
        l = 0
        r = len(nums) - 1
        self.fast_sort(l, r)
        result = ''.join(str(self.nums)[1:-1].split(', '))
        return result


if __name__ == '__main__':
    solution = Solution()
    a = [3, 30, 34, 5, 9]
    result = solution.minNumber(a)
    print(result)
    a = [1, 4, 7, 2, 5, 8, 0, 3, 6, 9]
    result = solution.minNumber(a)
    print(result)


#运行结果:
3033459
0123456789

Process finished with exit code 0

在这里插入图片描述

class Solution:
    def minNumber(self, nums: List[int]) -> str:
        def sort_rule(x, y):
            a, b = x + y, y + x
            if a > b: return 1
            elif a < b: return -1
            else: return 0
        
        strs = [str(num) for num in nums]
        strs.sort(key = functools.cmp_to_key(sort_rule))
        return ''.join(strs)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值