最简单的方法是使用
S
T
L
STL
STL中的
n
e
x
t
_
p
e
r
m
u
t
a
t
i
o
n
next\_permutation
next_permutation函数,这个函数有两个参数,第一个是容器的起始地址,第二个是容器的结束地址的下一位,这个函数是按照字典序从小到大输出全排列的,如果不存在字典序更大的全排列,那么函数返回
f
a
l
s
e
false
false,否则返回
t
r
u
e
true
true
计算全排列的时间复杂度是
O
(
n
!
)
O(n!)
O(n!)的,所以很少用这个函数直接计算全部的全排列,往往利用它能够输出下一个字典序更大的全排列,预先调整数组的顺序,控制输出个数,达到目标
递归求解
递归的思路是这样的,先把第一个位置元素和后面每一个交换一遍,这样就得到了
n
n
n个排列,这时候第一个位置就排好了,对这
n
n
n个排列从第二位开始往后继续进行上述操作,可以得到全部排列,这样每次需要移动的元素个数分别为
n
,
n
−
1...1
n,n-1...1
n,n−1...1,总的时间复杂度是
O
(
n
!
)
O(n!)
O(n!)