比如输入字符串 "1234 ", 输出所有的不重复的24个组合:1234,1243,1324,1342。。。。。。,

//比如输入字符串 "1234 ",   输出所有的不重复的24个组合:1234,1243,1324,1342。。。。。。,
//输入字符串 "123 ",   输出所有的不重复的9个组合:123,132,213,。。。。。。







public void intput(String inputstr ){
char flag='^';
if(inputstr==null){
return;
}
if(inputstr.length()<=1){
System.out.println(inputstr);
return;
}

int num_l=inputstr.length();
StringBuffer tempstr=new StringBuffer(inputstr);

for(int i=0;i<num_l;i++){

for(int j=1;j<num_l;j++){
if( ((i!=j))&&(tempstr.charAt(i)==tempstr.charAt(j))){
tempstr.setCharAt(i, flag);
}
}
}
inputstr=tempstr.toString();
//System.out.println("1111:"+inputstr);
tempstr.delete(0, tempstr.length());
for(int i=0;i<inputstr.length();i++){
if(inputstr.charAt(i)!=flag){
tempstr.append(inputstr.charAt(i));
}
}
inputstr=tempstr.toString();
System.out.println("inputstr:"+inputstr);
//num_l=inputstr.length()-1;
//input2(inputstr,inputstr.length());
char temp_chars[]=inputstr.toCharArray();
long time1=System.currentTimeMillis();
System.out.println(" 排序个数:"+temp_chars.length+" 当前时间:"+time1);
perm(temp_chars,0,temp_chars.length-1);
//System.out.println("V"+temp_vector.size());
System.out.println("所有时间:"+(System.currentTimeMillis()-time1));



}

public static void perm(char[] buf,int start,int end){
        if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可
           for(int i=0;i<=end;i++){
               // System.out.print(buf[i]);
            }
           // System.out.println();
        }
        else{//多个字母全排列
            for(int i=start;i<=end;i++){
                char temp=buf[start];//交换数组第一个元素与后续的元素
                buf[start]=buf[i];
                buf[i]=temp;
               
                perm(buf,start+1,end);//后续元素递归全排列
               
                temp=buf[start];//将交换后的数组还原
                buf[start]=buf[i];
                buf[i]=temp;
            }
        }
    }


不能输入^符号
注掉输出语句
当排列数为10:所用时间125;
当排列数为11:所用时间1344;
当排列数为12:所用时间16625;
当排列数为13:所用时间就很长了,不想等了。

你可能感兴趣的:(J#)