package cn.heima;
public class StringPaile {
/**
* @param args
*/
public static void main(String[] args) {
String s="asd";
int len = s.length();
char[] sb = new char[len];
char[] cc =s.toCharArray();//把string转变为char数组
int[] index = new int[len];
long startTime = System.currentTimeMillis();//记录开始时间
mixThey(cc,sb,0,len,index);
long endTime = System.currentTimeMillis();//记录结束时间
System.out.println((endTime-startTime)/1000f +"秒");//求出运行用的时间
}
public static void mixThey(char[] cc,char[] sb,int i,int n,int[] index) {
if(i==n){//如果i=n表明已运行完输出某种排列
System.out.println(new String(sb));
return;//出栈
}else{
for(int j=0;j<n;j++){//第一个数有len种排列第二个有len-1种第三次有len-2依次类推
boolean flag =false;//设置一标记
for(int k=0;k<i;k++){//我用循环来看前面是否已存在
if(index[k]==j){//如果前面存在就停止查找把flag设为true
flag=true;
break;
}
}
if(flag) continue;//如果为true说明有就继续找
index[i]=j;//能运行到这里表明前面中没有
sb[i]=cc[j];//把它存入sb数组中
mixThey(cc,sb,i+1,n,index);//接着用递归来处理sb数组i+1位子的放什么
}
}
}
}
public class StringPaile {
/**
* @param args
*/
public static void main(String[] args) {
String s="asd";
int len = s.length();
char[] sb = new char[len];
char[] cc =s.toCharArray();//把string转变为char数组
int[] index = new int[len];
long startTime = System.currentTimeMillis();//记录开始时间
mixThey(cc,sb,0,len,index);
long endTime = System.currentTimeMillis();//记录结束时间
System.out.println((endTime-startTime)/1000f +"秒");//求出运行用的时间
}
public static void mixThey(char[] cc,char[] sb,int i,int n,int[] index) {
if(i==n){//如果i=n表明已运行完输出某种排列
System.out.println(new String(sb));
return;//出栈
}else{
for(int j=0;j<n;j++){//第一个数有len种排列第二个有len-1种第三次有len-2依次类推
boolean flag =false;//设置一标记
for(int k=0;k<i;k++){//我用循环来看前面是否已存在
if(index[k]==j){//如果前面存在就停止查找把flag设为true
flag=true;
break;
}
}
if(flag) continue;//如果为true说明有就继续找
index[i]=j;//能运行到这里表明前面中没有
sb[i]=cc[j];//把它存入sb数组中
mixThey(cc,sb,i+1,n,index);//接着用递归来处理sb数组i+1位子的放什么
}
}
}
}