该全排列算法的核心在于使用递归,使得整个数组能够分成两块,相当于前面一块为一个整体,与后面的一个字母进行全排列,而前面的整整体也是通过全排列形成的,故满足要求。
例子中我们使用abcd四个元素,我们分成abc整体和d整体,当递归的开始指针指向数组的最后一个位置时,即end,打印该数组,打印出abcd;下一次递归abd为整体,c为另一部分的整体,递归到该次的尽头打印的为abdc;依次这样,能够打印出数组的全排列,重要的是每一次递归到尽头之后,需要对数组进行还原,方便进行下一次的递归。
总结一下:全排列就是从数组第一个位置起每个元素分别与它后面的元素一一交换,交换完之后记得返回到最初的位置
package cn.book.exercise;
public class BokkExercise1 {
public static int len = 1;
public static void main(String[] args) {
char[] str = {'a','b','c','e','f'};
perm(str,0,str.length-1);
}