这里 Vector<Vector<String>> result是用来记录所有排列的结果 Vector<String> visited 是用来记录一次排列的结果
这个算法空间复杂度很高。基本思想是将需要全排列数组的第一个元素取出来之后再对剩下的元素继续进行全排列,是个递归循环的过程
import java.util.Vector;
public class Test6 {
Vector<Vector<String>> result=new Vector<Vector<String>>();
public void showAll(Vector<String >vs,Vector<String> visited){
if(vs.size()==1){//如果已经访问到最后一个
visited.add(vs.get(0));
result.add(visited);//记录访问序列
return;
}else{
for(int i=0;i<vs.size();i++){
Vector<String> _vs=(Vector<String>)vs.clone();
Vector<String> _visited=(Vector<String>)visited.clone();
_vs.remove(i);
_visited.add(vs.get(i));
showAll(_vs,_visited);//对剩下的元素进行全排列 递归循环
}
}
}
public void showResult(){
System.out.println(result.size());
for(int i=0;i<result.size();i++){
Vector<String> temp=result.get(i);
for(int j=0;j<temp.size();j++){
System.out.print(temp.get(j)+" ");
}
System.out.println();
}
}
public Test6(){
int n=4;
//初始化
Vector<String> visited=new Vector<String>();
Vector<String> vs=new Vector<String>();
for(int i=0;i<n;i++){
vs.add(""+i);
}
showAll(vs,visited);
showResult();
}
public static void main(String[] args) {
Test6 app=new Test6();
}
}