(python version) 剑指 offer 45. 把数组排成最小的数

该博客主要介绍了如何使用Python解决LeetCode上的剑指 Offer 45问题,即如何将数组排成最小的数。作者提供了两种解决方案:一种是利用Python的自定义排序规则,通过functools模块实现;另一种是采用快速排序法。通过具体代码和解释,帮助读者理解这两种方法。
摘要由CSDN通过智能技术生成

题目描述

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
来源:力扣(LeetCode)
在这里插入图片描述

可以测试的 usecase

都是跑失败过的例子(解答错误),可供再次练习时的测试使用。

a = [10,2]
a = [3,30,34,5,9]
a = [0,9,8,7,6,5,4,3,2,1]
a = [128,12,320,32]
a = [5,54,52,67,68,5,52,17,93,53]
a = [52,5,51,50]
a = [824,938,1399,5607,6973,5703,9609,4398,8247]

解题思路

  • 我们需要确定一个规则判断 m 与 n 哪个应该排在前面,而不是仅仅比较这两个数字的值哪个更大。
  • 一个非常直观的解决大树问题的方法就是把数字转换成字符串。另外,由于把数字 m 和 n 拼接起来得到 mnnm,它们的位数肯定是相同的,因此比较他们的大小只需要按照字符串大小的比较规则就可以了。
方法一
  • python3 当中的自定义排序:使用 functools 模块当中的 cmp_to_key
    • 详细说明:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值