/**
* 给定N个不同的字符,将这些字符全排列,最终的结果将会是N!中。
* 如给定A,B,C三个不同的字符,则结果为ABC,ACB,BAC,BCA,CAB,CBA
* @author acer
*/
package pac01;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class AllPermutation {
public static void main(String [] args) throws IOException {
char ch[] = {'A','B','C','D'};
int t = 1;
for(int i=1;i<=ch.length;) {
t *= i++;
}
System.out.println("共有"+t+"种组合方式");
char result[] = new char[ch.length];
AllPermutation.show(0,ch,result);
}
/**
* 传递参数
* @param ch 字符数组
* @param length 字符数组的长度
*/
public static void show(int t,char[] ch,char[]result){
//如果只有一个字符
if(ch.length == 1) {
result[t] = ch[0];
System.out.println(result);
return;
}
//如果有多个字符
for(int i=0;i<result.length-t;i++) {
result[t] = ch[i];
char []newSource = getNewSource(ch,ch[i]);
show(t+1,newSource,result);
}
}
public static char[] getNewSource(char[] source,char c) {
char[] newSource = new char[source.length-1];
for(int i=0,j=0;i<source.length;i++) {
if(source[i] != c) {
newSource[j] = source[i];
j++;
}
}
return newSource;
}
}
|