题目:输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串
例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串
abc、acb、bac、bca、cab 和cba。
/*思路:考察递归
* / abc(1,1)
* abc(0,0)\ acb(1,2)
* / bac(1,1)
* / /
*abc --bac(0,1)\bca(1,2)
* \
* \ /cba(1,1)
* cba(0,2)\cab(1,2)
**/
代码如下:
/**
* @PLA 字符串的排列
* 题目:输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串
abc、acb、bac、bca、cab 和cba。
*/
/*思路:考察递归
* /abc(1,1)
* abc(0,0)\acb(1,2)
* / bac(1,1)
* / /
*abc --bac(0,1)\bca(1,2)
* \
* \ /cba(1,1)
* cba(0,2)\cab(1,2)
**/
public class permutation {
void swap(String[] str, int k, int begin) {
String temp = null;
temp = str[k];
str[k] = str[begin];
str[begin] = temp;
}
void getPermutation(String[] str, int begin, int end) {
if (begin == end - 1) {
System.out.println("-----------------");
for (String s : str) {
System.out.println(s);
}
} else {
for (int k = begin; k < end; k++) {
swap(str, k, begin);
getPermutation(str, begin + 1, end);
swap(str, begin, k);
}
}
}
public static void main(String[] args) {
String[] str = new String[] { "a", "b", "c" };
int begin = 0, end = str.length;
permutation p = new permutation();
p.getPermutation(str, begin, end);
}
}
运行结果:
-----------------
a
b
c
-----------------
a
c
b
-----------------
b
a
c
-----------------
b
c
a
-----------------
c
b
a
-----------------
c
a
b