给定{1,2,3,4,...,n}的排列组合数为n!个
虽然我们知道n!怎么算,但是代码怎么实现的呢
一般思路来说,肯定是要用递归的
流程就是确定第1位,剩下的n-1位进行全排列,确定第2位,剩下的n-2位全排列。。。
普通递归实现:
def permutation(arr, p, q):
if p == q:
print(arr)
else:
for index in range(p, q):
arr[index], arr[p] = arr[p], arr[index]
permutation(arr, p+1, end)
arr[index], arr[p] = arr[p], arr[index]
arr = [1,2,3]
permutation(arr, 0 ,len(arr))
利用itertools来直接调用:
from itertools import permutations
print(permutations([2,3,4]))
利用深度优先算法实现:代码来自链接
visit = [True, True, True]
temp = ["" for x in range(0, 3)]
def dfs(position):
if position == len(arr):
print(temp)
return
for index in range(0,len(arr)):
if visit[index] == True:
temp[position] = arr[index]
visit[index] = False
dfs(position + 1)
visit[index] = True
arr = ["a", "b", "c"]
dfs(0)
252

被折叠的 条评论
为什么被折叠?



