题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
调用了functools库。
代码:
from functools import cmp_to_key
def PrintMinNumber( numbers):
# write code here
nums = list(map(str, numbers))
nums.sort(key=cmp_to_key(lambda x, y: ((x+y)>(y+x)) - ((y+x)>(x+y))))
return ''.join(nums)
关于lambda后面的逻辑:
a = '22'#22
b = '23'#23
c = ((a+b)>(b+a)) - ((b+a)>(a+b))
print('{}_{}'.format(((a+b)>(b+a)), ((b+a)>(a+b))))
print(c)
输出:
False_True
-1
python2.x中有cmp(a,b),但是py3版本没有了,用下面的代替:
(a>b) - (a<b)
即判断a和b的大小。