赞
踩
正题之前
三玖yyds!!!
给定一组非负整数 nums
,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:
nums = [10,2]
输出:"210"
示例 2:
输入:
nums = [3,30,34,5,9]
输出:"9534330"
题目链接:click here
此题求拼接起来的最大数字。设数组nums 中任意两数字的字符串为 x 和 y,则规定 贪心策略:
若拼接字符串 x+y>y+x,则x“大于”y 。
反之,若 x+y<y+x,则 x“小于” y。
x “小于” y 代表:排序完成后,数组中 x 应在 y 左边;“大于” 则反之。
根据以上规则,套用排序方法对 nums 执行排序即可。
详细题解:. - 力扣(LeetCode)
- class Solution:
- def largestNumber(self, nums: List[int]) -> str:
- # 自定义比较函数
- def _myfunc(a,b):
- return int(str(a)+str(b))-int(str(b)+str(a))
- # nums按照自定义函数排序
- nums.sort(key=cmp_to_key(_myfunc), reverse=True)
- # 拼接为字符串
- ans=""
- for i in nums:
- ans+=str(i)
- # 防止ans中元素均为"0"
- if ans[0]=='0':
- return '0'
- return ans
这段代码定义了一个Solution类,其中包含一个名为largestNumber的方法。该方法接受一个整数列表nums作为输入,并返回一个字符串。在方法中,我们首先定义了自定义的比较函数_myfunc,然后使用该函数对nums进行排序。最后,我们将排序后的数字拼接成一个字符串,并检查第一个字符是否为0,如果是,则返回"0",否则返回拼接后的字符串。
这种方法非常巧妙地利用了Python的内置排序函数和自定义比较函数,以及对字符串和整数的转换操作,来解决了一个看似复杂的问题
希望这篇博客能够帮助你更好地理解Python中的排序和比较函数,并激发你对算法和数据结构的兴趣。如果你有任何疑问或建议,欢迎在评论区留言,让我们一起讨论!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。