全排列问题可以用递归解决。假设我们要对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]