题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
# -*- coding:utf-8 -*-
class Solution:
def compare(self,num1,num2):
t = str(num1)+str(num2)
s = str(num2)+str(num1)
if t>s:
return 1
elif t<s:
return -1
else:
return 0
def PrintMinNumber(self, numbers):
# write code here
if numbers is None:
return ""
lens = len(numbers)
if lens ==0 :
return ""
tmpNumbers = sorted(numbers,cmp=self.compare)
return int(''.join(str(x)for x in tmpNumbers))
print Solution().PrintMinNumber([3,32,321])
思路很简单,就是将列表中的数两两按字符串相加,比较大小并排序,最后整合排序数列。
这里要说一下sort函数中的cmp参数,这个参数在py3中已经没有了,具体的用法是,传入一个函数,这个函数将待排序列表中的元素两两比较,如果返回为正,则交换两者的位置,即y在前x在后,否则x在前y在后。
例如:
def mycmp1(x,y): #升序排列
return x-y
def mycmp2(x,y): #降序排列
return y-x
#升序排列
numbers = [5,2,9,7]
def mycmp1(x,y):
return x-y
numbers.sort(cmp = mycmp1)
print numbers
>>>
[2, 5, 7, 9]
#降序排列
numbers = [5,2,9,7]
def mycmp2(x,y):
return y-x
numbers.sort(cmp = mycmp2)
print numbers
>>>
[9,7,5,2]