考察点
递归
知识点
题目
分析
题目要求打印字符串的全排列,对于这种问题我们可以对问题进行拆解,试想一下第一个位置的元素依次和后面的元素进行位置交换,那么第一个位置的全排列就已经有了,这个时候再去递归考虑后面的,即交换第二个位置的元素和它后面的部分,直到字符串末尾
public class TwentyEight {
public static void main(String[] args) {
char[] str = {'a','b','c'};
exchange(str,0,str.length);
}
public static void exchange(char[] str,int idx,int len) {
if (idx + 1 == len) {
System.out.println(new String(str));
return;
}
for (int i = idx;i<len;i++) {
char tmp = str[i];
str[i] = str[idx];
str[idx] = tmp;
exchange(str,idx+1,len);
tmp = str[i];
str[i] = str[idx];
str[idx] = tmp;
}
}
}