有一个非负整数列表。现要把列表中的元素重新排列组合成一个最大的数。每个数不可拆分。 例如,列表元素有3,30,34,5,9, 重新组合后的最大值为9534330。 编写程序,输入一个非负整数列表,计算并输出拼接后的最大数。
时间: 2023-06-04 12:06:52 浏览: 116
MaxNumInts:编写一个函数,给出一个非负整数列表,将它们排列成尽可能大的数字
好的,我明白了。这是一道数学问题,涉及到数学的排列组合。
对于这个问题,我们可以将列表中所有数字按照特定的排序方式进行排列组合。具体来说,我们可以编写一个比较函数,用于判断两个数字之间哪一个应该排在前面。然后,我们可以对整个列表进行排序操作,将数字按照从大到小的顺序排列。
最后,我们只需要将所有的数字依次拼接起来就可以得到最大的数了。
以下是具体的代码实现:
```
def largestNumber(nums):
def compare(x, y):
if int(str(x)+str(y)) > int(str(y)+str(x)):
return 1
else:
return -1
nums.sort(cmp=compare)
return str(int(''.join(map(str, nums))))
print(largestNumber([3, 30, 34, 5, 9])) # 输出 9534330
```
注意:以上代码是通过Python 2.x运行的,Python 3.x中已经不支持 cmp=compare 的写法。如果是Python 3.x,需要将其中的cmp修改为key,然后在compare函数中返回 x+y 和 y+x 之间的比较结果。
阅读全文