全排列

方法一(非递归):

算法原理:P = {1,2,3,...n},元素集合

1、在P中从右向左遍历,直至查到P{i} < P{i+1} ,记录i的值

2、在P中从右向左遍历,找到第一个比P{i}大的值 P{j},记录此时j的值

3、交换P{i}​​​​​​​ 和P{j}​​​​​​的值

4、将i以后的值翻转,得到新的序列

5、重复第一步,直至所有的元素都已经是倒序排列

方法二(递归):

基本思想:去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换;增加了判断条件,重复出现则不交换,否则进行交换

1 bool isSwap(int* arrayL, int begin, int end) {
2     for (int i = begin; i != end; i++)
3         if (arrayL[i] == arrayL[end])
4             return false;
5 
6     return true;
7 }
View Code
原文地址:https://www.cnblogs.com/ljy08163268/p/11725576.html