[筆記] Python實現全排列算法


所謂全排列,就是給定數組,將所有的可能排列組合都枚舉出來,n個元素共有n!種排列組合。

舉例,對於['1', '2', '3'],全排列結果為:123,132,213,231,312,321,共有3!=6種。

很直覺的思路就是從數組中依次挑選一個元素作為第1元素,固定第1元素之后,再將剩下的n-1個元素做全排列。

很顯然這是遞歸的思路,還需要確定跳出條件,這里是只剩下1個元素時,自然就到頭了。

根據這個思路,代碼如下:

from __future__ import print_function

def perm(elem_list, s=''):
    # 類型檢查
    if type(elem_list) != type([]):
        return

    # 參數合法性檢查
    if len(elem_list) == 0:
        return

    # 跳出條件
    if len(elem_list) == 1:
        # 打印當前結果
        print(s+elem_list[0])
        return

    # 依次挑選一個元素作為第1元素
    for i,e in enumerate(elem_list):
        # 遞歸調用自身,同時傳入當前的前綴字符串
        perm(elem_list[:i] + elem_list[i+1:], s+e)


# 測試用例
perm(['1', '2', '3'])

上述代碼的運行結果如下:

123
132
213
231
312
321


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM