一、方法一(List集合)
package sf_01;
import java.util.List;
import java.util.Vector;
public class Main {
public static List f(String s){
List list=new Vector();
if(s.length()==1){
list.add(s);
return list;
}
/*
* 思路为:
* 取出'A',则对剩下的'BC'进行全排列 得到'BC'和'CB',存放在list中。递归返回后,将其与'A’组合。
* 构成'ABC'和'ACB',其余同理。
*/
for(int i=0;i<s.length();i++){
char x=s.charAt(i);
List t=f(s.substring(0,i)+s.substring(i+1));
for(int k=0;k<t.size();k++){
list.add(""+x+t.get(k));
}
}
return list;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=f("ABC");
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
运行结果如下:
二、方法二(使用数组)
package sf_02;
public class Main {
/*
*aa:待排元素
*k:考虑的当前位置(数组下标)
*/
public static void f(char[] aa,int k){
if(k==aa.length-1){
//将char数组转换为字符串。
System.out.println(String.valueOf(aa));
return;
}
for(int i=k;i<aa.length;i++){
char c=aa[i];aa[i]=aa[k];aa[k]=c;
f(aa,k+1);
char d=aa[i];aa[i]=aa[k];aa[k]=d;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//将字符串转换为字符数组。
f("ABC".toCharArray(),0);
}
}