题目:输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串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