全排列以及全组合
全排列
这里主要使用递归来实现,也就是考察递归的熟练使用与否
全排列的递归生成规则为:
- n个数的全排列=(其中一个数的前缀)+n-1个树的全排列
- 当前只剩下一个待选前缀的时候,停止迭代
- 关于前缀的设立,是逐个迭代剩余的候选元素通过两两交换完成的,在进行输出之后还需要还得将两个数字重新交换回去
1 | /** |
进行测试输出为:1
2int[] a={1,2,3};
permutation(a,0,a.length-1);
最终的结果是
123
132
213
231
321
312
这里,这里只考虑的无重复的情况,一旦有重复的,需要考虑去重,因为两个相同的数字交换没什么意思啊。这里的去重主要是在for循环中添加一个isSwap来判断是否要交换即可。
全组合
全组合貌似就是一个元素的全子集算法,之前做过的-_-
参考
- http://blog.csdn.net/hackbuteer1/article/details/7462447
- http://blog.csdn.net/hackbuteer1/article/details/6823329
本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权