题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路
用自定义规则的快速排序算法解决。即:和普通的快排算法相比,这道题的快排算法的排序规则不是单纯的比较两个数的大小,而是迎合题意,比较组合数的大小。
Python代码
def strSort(self, list):
if len(list) <= 1:
return list
left = self.strSort([i for i in list[1:] if (i+list[0]) < (list[0]+i)])
right = self.strSort([i for i in list[1:] if i+list[0] >= list[0] + i])
return left+[list[0]]+right
为了更为直观地对比,以方便理解,文末给出普通的快排算法。
def quick_sort(self, list):
if len(list) < 2:
return list[:]
left = (self.quick_sort([i for i in list[1:] if i <= list[0]]))
right = (self.quick_sort([i for i in list[1:] if i > list[0]]))
return left + [list[0]] + right