題目描述
輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{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