有一个数n,求从1到n的所有排列?并打印出来
如给一个3它的所有排列为
123 132 213 231 312 321
我这里已经有了一个算法但效率太低,看大家还有什么好方法。最好是用多叉树做。
import java.lang.*;
import java.util.*;
public class NLevelCollecte {
public Vector collecte = new Vector();
public void memberMethod(int level){
int n = level;
String startStr = null;
String endStr = null;
for(int i = 0;i<n;i++){
if(startStr==null) startStr = "1";
else startStr = startStr + "1";
}
for(int i = 0;i<n;i++){
if(endStr==null) endStr = new Integer(n).toString();
else endStr = endStr + new Integer(n).toString();
}
//System.out.println(startStr+" "+endStr);
int start = Integer.parseInt(startStr);
int end = Integer.parseInt(endStr);
for(int i= start;i<end;i++){
if(isPass(i,n))
collecte.addElement(new Integer(i));
}
}
public boolean isPass(int parmater,int n){
Vector cell = new Vector();
for(int j = 0 ;j<n;j++){
String cellValue = (new Integer(parmater).toString()).substring(j,j+1); //
if(cellValue.equals("0")) return false;
if(Integer.parseInt(cellValue)>n) return false;
if(cell.size()==0){
cell.addElement(cellValue);
continue ;
}
for(int k = 0;k<cell.size();k++)
if(cellValue.equals((String)cell.elementAt(k)))
return false;
cell.addElement(cellValue);
}
return true;
}
public static void main(String[] args) {
NLevelCollecte obj = new NLevelCollecte();
obj.memberMethod(4);
System.out.println(obj.collecte);
System.out.println(obj.collecte.size());
}
}