...

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]
posted @ 2020-06-05 21:04  韩志超  阅读(3480)  评论(0编辑  收藏  举报