题目:求一个字符集合的放回全排列。
如:{a,b,c},输出结果为27种:
I/System.out: aaa
I/System.out: aab
I/System.out: aac
I/System.out: aba
I/System.out: abb
I/System.out: abc
I/System.out: aca
I/System.out: acb
I/System.out: acc
I/System.out: baa
I/System.out: bab
I/System.out: bac
I/System.out: bba
I/System.out: bbb
I/System.out: bbc
I/System.out: bca
I/System.out: bcb
I/System.out: bcc
I/System.out: caa
I/System.out: cab
I/System.out: cac
I/System.out: cba
I/System.out: cbb
I/System.out: cbc
I/System.out: cca
I/System.out: ccb
I/System.out: ccc
参见:Java实现全排列、组合算法
Java代码实现为:
/**
* 放回全排列
* 若干了个(char[]的长度)筛子的组合
*/
public static char[] cs;
public void startRePerm(char[] str) {
cs = String.valueOf(str).toCharArray();
rePerm(str, 0);
}
private void rePerm(char[] str, int pos) {
if (pos == str.length - 1) {
for (int i = 0; i < str.length; i++) {
str[pos] = cs[i];
System.out.println(str);
}
return;
}
for (int i = 0; i < str.length; i++) {
str[pos] = cs[i];
rePerm(str, pos + 1);
}
}