求最大数

给定一个非负整数列表,重新排列他们顺序组成最大的整数。

问题描述: 给定一个非负的整数列表,重新排列,使得他们组成一个最大的整数。例如: [3, 30, 34, 5, 9], 组成最大的数是9534330. (注意: 结果可能非常大,需要返回一个字符串)

看了一下python里面字符串的比较, “30”大于”3”,但是这里需要的是3排在30前面.于是就很快用python实现了一个比较,然后排序,最后链接成字符串。当然也可以写个类,继承str,然后吧比较的方法重新写一下。
直接怼代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
def compare(a, b):
a, b = min([a, b]), max([a, b])
sa = str(a)
sb = str(b)
minlen = len(sa)
for idx in range(minlen):
if sa[i] < sb[i]:
return int(sb), int(sa)
if sa[i] > sb[i]:
return int(sa), int(sb)
if sb[length] >= sa[length - 1]:
return int(sb), int(sa)
else:
return int(sa), int(sb)
def mysort(testlist):
length = len(testlist)
for i in range(length):
for j in range(length):
a, b = testlist[i], testlist[j]
testlist[i], testlist[j] = compare(a, b)
return testlist
# example
test = [3, 30, 34, 5, 9]
mylist = mysort(test)
# --> [9, 5, 34, 3, 30]
max_number = "".join([str(i) for i in mylist])
print(max_number)

To Do Lists

  • 用类来实现一下
  • 用递归来写一下
  • 用CPP 版本
人艰不拆,生活不易