当前位置:   article > 正文

每日leetcode--最大数

每日leetcode--最大数

正题之前 

三玖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)

python代码

  1. class Solution:
  2. def largestNumber(self, nums: List[int]) -> str:
  3. # 自定义比较函数
  4. def _myfunc(a,b):
  5. return int(str(a)+str(b))-int(str(b)+str(a))
  6. # nums按照自定义函数排序
  7. nums.sort(key=cmp_to_key(_myfunc), reverse=True)
  8. # 拼接为字符串
  9. ans=""
  10. for i in nums:
  11. ans+=str(i)
  12. # 防止ans中元素均为"0"
  13. if ans[0]=='0':
  14. return '0'
  15. return ans

这段代码定义了一个Solution类,其中包含一个名为largestNumber的方法。该方法接受一个整数列表nums作为输入,并返回一个字符串。在方法中,我们首先定义了自定义的比较函数_myfunc,然后使用该函数对nums进行排序。最后,我们将排序后的数字拼接成一个字符串,并检查第一个字符是否为0,如果是,则返回"0",否则返回拼接后的字符串。

这种方法非常巧妙地利用了Python的内置排序函数和自定义比较函数,以及对字符串和整数的转换操作,来解决了一个看似复杂的问题

注意事项

  • sort中用到的排序函数不可用lambda定义,因为lambda定义的函数只能接受一个参数,所以只能def定义一个比较函数,再用functools.cmp_to_key将def定义的比较函数转为关键字函数,之后传给sort中的key
  • 当ans中都是‘0’时,只能返回一个‘0’

结语

希望这篇博客能够帮助你更好地理解Python中的排序和比较函数,并激发你对算法和数据结构的兴趣。如果你有任何疑问或建议,欢迎在评论区留言,让我们一起讨论!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/208695
推荐阅读
相关标签
  

闽ICP备14008679号