题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
题目链接
解题思路
采用快排的思想,将快排中的两个数的大小比较换成两个数拼接在一起后的大小比较
class Solution:
def PrintMinNumber(self, numbers):
# write code here
if numbers is None or len(numbers)<=0:return ''
for index in range(len(numbers)):
numbers[index] = str(numbers[index])
array = self.Parition(numbers)
return ''.join(array)
def Parition(self,array):
if len(array)<=1:return array
left = self.Parition([i for i in array[1:] if i+array[0] <= array[0]+i])
right = self.Parition([i for i in array[1:] if i+array[0]>array[0]+i])
return left +[array[0]] +right