解题思路:
错误方案:
大的数数字在前面,小的数字在后面 举一个反例说明一下这个方案为什么错:{9,10},排出来的最大数字是910,但是这样排的结果是109
正确方案:
对于两个数字A、B来说,如果AB>BA,那么A就应该放在B的前面。(AB表示数字A和B进行拼接)
(这个前面不一定是紧挨着B,还有可能是EACDBF这样) 比如 我现在有一些数字是这样排列的; ECDBAF 然后 AB>BA
,那么ECDABF>ECDBAF 交换了AB的顺序以后,如果AD>DA,那么A的顺序还要前移。
class s:
def solve(self,num):
cur = [str(n) for n in num] // 将数组里面的值转成字符串后以列表形式显示
// print(cur) # ['30', '1']
for i in range(len(cur)): // 每个数都进行一次比较
// print('i1 = ',i)
for j in range(i+1,len(cur)):
// print('i2 = ',i,'j= ',j)
// print('cur[i]=',cur[i],'cur[j]=',cur[j],type(cur[i]))
if cur[i]+cur[j] > cur[j]+cur[i]:
continue
else:
cur[i],cur[j] = cur[j],cur[i]
// print(cur)
print(''.join(cur))
s().solve([2,20,23,4,8])
运行结果
i1 = 0
i2 = 0 j= 1
cur[i]= 2 cur[j]= 20 <class 'str'>
i2 = 0 j= 2
cur[i]= 2 cur[j]= 23 <class 'str'>
i2 = 0 j= 3
cur[i]= 23 cur[j]= 4 <class 'str'>
i2 = 0 j= 4
cur[i]= 4 cur[j]= 8 <class 'str'>
['8', '20', '2', '23', '4']
i1 = 1
i2 = 1 j= 2
cur[i]= 20 cur[j]= 2 <class 'str'>
i2 = 1 j= 3
cur[i]= 2 cur[j]= 23 <class 'str'>
i2 = 1 j= 4
cur[i]= 23 cur[j]= 4 <class 'str'>
['8', '4', '20', '2', '23']
i1 = 2
i2 = 2 j= 3
cur[i]= 20 cur[j]= 2 <class 'str'>
i2 = 2 j= 4
cur[i]= 2 cur[j]= 23 <class 'str'>
['8', '4', '23', '20', '2']
i1 = 3
i2 = 3 j= 4
cur[i]= 20 cur[j]= 2 <class 'str'>
['8', '4', '23', '2', '20']
i1 = 4
['8', '4', '23', '2', '20']
8423220