分析
全排列是一个常见的算法逻辑题,对于例子{1,2,3}来说它的全排列:A33=6个,枚举结果如下:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
每个元素作为首位,剩下元素的全排列:
这句话如何理解挺关键,是整个递归思路的总结,我们按照两个步骤来分析
步骤1
“剩下元素的全排列” 实际上就是一个递归的语句,它的结束条件是剩下元素只有一个元素了,那么前面的元素全部固定,和剩下的这个最后元素组成的结果就是全排列的一个序列。
步骤2
每个元素放置到首位
元素作为首位,实际也存在一个递归的理解。 如例子中的1开头,剩余元素的子问题中,2也做过首位等。
编码思路
代码及注解
1 | public static void printFullArray(int[] a, int start, int end) { |
全排列递归:C1FullArray.java
引申问题:元素存在相同如何处理 如{1,2,2,3}。加上判定,交换或者作为开头的元素是之前未处理过的。
版权声明:本文为博主原创文章,未经允许不得转载。