脚本宝典收集整理的这篇文章主要介绍了给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
文章为原创首发地址:https://hooyes.net/p/python-l...
描述
给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。
例
给出 [1, 20, 23, 4, 8],返回组合最大的整数应为 8423201
给出 [1, 201, 20, 9, 8],返回组合最大的整数应为 98202011
给出 [1, 203, 20, 9, 8],返回组合最大的整数应为 98203201
算法
我给简单好理解的两个排序算法:
算法1:
先把对比的数字转成字符,拼接后再转成整数进行大小对比,即 int(a+b) 与 int(b+a) 进行降序排列。代码1。
算法2:
每个元素逐个字符进行对比。代码2。
代码1
# python2
class Solution:
def largestNumber(self, nums):
scmp = lambda a,b: int(b+a)-int(a+b)
res = ''.join(sorted(map(str, nums), cmp=scmp)).lstrip('0')
return res or '0'
# Python3
From functools import cmp_to_key
class Solution:
def largestNumber(self, nums):
key = cmp_to_key(lambda a,b: int(b+a)-int(a+b))
res = ''.join(sorted(map(str, nums), key=key)).lstrip('0')
return res or '0'
代码2
# Python2
class Solution:
def largestNumber(self,nums):
def cxx(x,y):
i = 0
sx= str(x)
sy= str(y)
while i< len(str(min(x,y))):
if sx[i] > sy[i]:
return 1
elif sx[i] < sy[i]:
return -1
elif x == y:
return 0
i+=1
if i == len(sx):
return -1 if sy[i]>sy[0] else 1
if i == len(sy):
return 1 if sx[i]>sx[0] else -1
nx = sorted(nums,cmp=lambda x,y:cxx(x,y),reverse=True)
res = ''.join(map(str, nx)).lstrip('0')
return res or '0'
测试
t = Solution()
PRint(t.largestNumber([1, 20, 23, 4, 8]))
// 8423201
以上代码已放到Hooyes的Github上开源,欢迎Fork或提建议。
largest-number.py
运行 python largest-number.py 即可以测试。
以上是脚本宝典为你收集整理的给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。全部内容,希望文章能够帮你解决给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。