题目:输入一个字符串,打印出该字符串中字符的所有排列。例如,输入字符串 abc,则打印出由字符 a、b、c 所能排列出来的所有字符串 abc、acb、bac、bca、cabcba

我们要打印出字符串中字符的所有排列,就是要让字符能够出现在所有的位置上。我们的方法如下,首先将字符串分为两部分,第一部分只有首字符一个字符,第二部分是剩下的部分。接着我们分为两步出来

  1. 第一步让所有的字符都能够出现在首位,将首字符依次与后面的字符进行交换,这样能够保证首字符可以出现在后面的每个位置上,也可以保证后面的字符出现在第一个位置上
  2. 第二步我们固定第一个字符,接着处理第二部分,而第二部分的处理也是将第二部分也分为两部分,首字符与剩下的部分两部分,这是一个递归的过程,通过这样的处理,我们确保每个字符都能够出现在每个位置上

代码如下:

public static void permutation(String string) {
char[] str = string.toCharArray();
permutation(str, 0);
}

private static void permutation(char[] str, int index) {
if (index == str.length) {
System.out.println(new String(str));
}
for (int i = index; i < str.length; i++) {
// 首字符与后面的字符进行交换
char temp = str[i];
str[i] = str[index];
str[index] = temp;

// 固定首字符,处理第二部分
permutation(str, index + 1);

// 将字符交换回来,以便首字符能够出现在后面的每个位置
temp = str[i];
str[i] = str[index];
str[index] = temp;
}
}