有一个数n,求从1到n的所有排列?并打印出来

haozhangpk 2004-02-18 09:06:33
如给一个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());
}
}
...全文
43 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧