把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
- 比较器
定义一种新的比较规则,如果
e v a l ( s t r ( n u m 1 ) + s t r ( n u m 2 ) ) < e v a l ( s t r ( n u m 2 ) + s t r ( n u m 1 ) ) eval(str(num1)+str(num2) ) < eval(str(num2)+str(num1) ) eval(str(num1)+str(num2))<eval(str(num2)+str(num1))
那么我们认为num1小于num2。
在sorted函数里设置比较器,得到满足要求的排序好的列表。
通过join函数拼接得到最终的结果。
代码
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
# write code here
newNumbers = sorted(numbers,cmp = self.myCmp)
return ''.join(map(lambda x:str(x),newNumbers))
def myCmp(self,number1,number2):
str1,str2 = str(number1),str(number2)
if eval(str1+str2) < eval(str2+str1):
return -1
else:
return 1
if __name__ == "__main__":
print Solution().PrintMinNumber([3,5,1,4,2])