劍指offer:把數組排成最小的數(Python)

題目描述

輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{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
發佈了85 篇原創文章 · 獲贊 103 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章