全排列

全排列问题可以用递归解决。假设我们要对1,2,3,4四个数进行全排列,分四种情况:

(a) 以 1 开头,求 2,3,4 全排列
(b) 以 2 开头,求 1,3,4 全排列
(c) 以 3 开头,求 1,2,4 全排列
(d) 以 4 开头,求 1,2,3 全排列

而对于 3 个数的全排列也可以按照这种思路递归下去

代码如下

def f(array):
    if len(array)==1:
        return array
    ans = []
    num = len(array)
    for i in range(num):
        sub = array[:i]+array[i+1:]
        for j in f(sub):
            if type(j)==type(1):
                ans.append([array[i],j])
            else:
                ans.append([array[i]]+j)
    return ans

array=[1,2,3,4]
for i in f(array):
    print(i)

运行代码

[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 2, 3]
[1, 4, 3, 2]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 1, 3]
[2, 4, 3, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 1, 2, 3]
[4, 1, 3, 2]
[4, 2, 1, 3]
[4, 2, 3, 1]
[4, 3, 1, 2]
[4, 3, 2, 1]
posted @ 2021-01-22 13:46  Bill_H  阅读(124)  评论(0编辑  收藏  举报