比如输入字符串 "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:所用时间就很长了,不想等了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值