/**
* 全排列递归实现
*/
private List<String> quanpailie(char[] cs, int current) {
//结果
List<String> result = new LinkedList<>();
//当前指向数组最后一位时,将数组(全排列的一种)输出到结果集里
if (current == cs.length - 1) {
result.add(Arrays.toString(cs));
} else {
//循环改变数组的第一个位置的值,并求剩下的其他字符的全排列,并装入结果集.
for (int i = current; i < cs.length; i++) {
//交换当前字符与下一字符
swap(cs, current, i);
//这一块难理解,相当于,在A确定放在第一位的时候,求BC的全排列,并且加上A,形成ABC,ACB放入结果集.
result.addAll(quanpailie(cs, current + 1));
//交换回来,方便下一次交换.
swap(cs, current, i);
}
}
return result;
}
/**
* 交换数组第b,e位置上的值
*/
private void swap(char[] cs, int b, int e) {
char tmp = cs[b];
cs[b] = cs[e];
cs[e] = tmp;
}