#JAVA全排列问题分析
##求多个字符的全排列(例如A,B,C) ####分析: ####代码: `public static void main(String[] args) {
String str = "ABCDE";
List<String> list = new Study1().quanpai(str.toCharArray(), str.length()-1);
//list排序,就本题来说无多大意义
Collections.sort(list);
for (String string : list) {
System.out.println(string);
}
System.out.println("---------------------"+list.size());
}
/**
* 求全排列
* [@param](https://my.oschina.net/u/2303379) c 全排列的字符数组
* [@param](https://my.oschina.net/u/2303379) n 字符数组的长度
* [@return](https://my.oschina.net/u/556800) list 全排列字符串列表
*/
public List<String> quanpai(char c[],int n){
//定义一个list保存全排列后的字符串
List<String> list = new ArrayList<String>();
//如果只有一个字符直接返回
if(n==0){
list.add(c[n]+"");
return list;
}
//递归进行排列
list = quanpai(c,n-1);
//循环过程中list.size()会改变不能直接作为循环条件
int num = list.size();
//循环插入字符 如字符串“A” 结束后应有“AB”,“BA”;
for(int i=0;i<num;i++){
//取出list中的第一个字符串,因为需要的是插入字符后该改变的字符串,所以取出的同时移除该字符串
String oldstr = list.remove(0);
for(int j=0;j<=n;j++){
//因为插入一个字符后下一次不能再在该字符串插入
//如:字符串“A” 变为“BA”后,“BA”不能在插入B,应该重新定义“A”再插入B变为“AB”,
//故每次插入前新定义一个字符串,使用StringBuffer更方便插入
StringBuffer strbuf = new StringBuffer(oldstr);
strbuf.insert(j, c[n]);
list.add(strbuf.toString());
}
}
return list;
}
`