Python實現全排列的一種算法


題目

列表arr =[1,2,3]輸出其全排列。

思路

采取遞歸推導的方法來實現。

  • 遞歸出口:如果列表長度為1,返回[arr]
  • 推導策略:
    - 選取第一個為基准數,如1,獲取上層(剩余部分)的推導結果,如[[2,3], [3,2]]
    - 遍歷上層推導結果,復制一份,並將1依次插入列表的從頭到尾處,如組合[2,3]得到[1,2,3],[2,1,3],[2,3,1]

代碼實現

def perm(arr):
    """實現全排列"""
    length = len(arr)
    if length == 1:  # 遞歸出口
        return [arr]

    result = []  # 存儲結果
    fixed = arr[0]
    rest = arr[1:]

    for _arr in perm(rest):  # 遍歷上層的每一個結果
        for i in range(0, length):  # 插入每一個位置得到新序列
            new_rest = _arr.copy()  # 需要復制一份
            new_rest.insert(i, fixed)
            result.append(new_rest)
    return result

if __name__ == '__main__':
    r = perm([1,2,3])
    for i in r:
        print(i)

輸出結果

[1, 2, 3]
[2, 1, 3]
[2, 3, 1]
[1, 3, 2]
[3, 1, 2]
[3, 2, 1]


免責聲明!

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



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