递归——数组全排列
2019-05-13 本文已影响0人
就这样吧嘞
方法一 深度
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Scanner sc = new Scanner (System.in);
int sz[] = {1,2,3,4,5,6};
digui(sz,0,5);
}
public static void swap(int aa[],int m,int n) {
int x =aa[n];
aa[n]=aa[m];
aa[m]=x;
}
public static void digui(int aa[],int start ,int end) {
if(start==end) {
for(int i=0;i<aa.length;i++) {
System.out.print(aa[i]);
}
System.out.println();
}
else {
for(int j=start;j<=end;j++) {
swap(aa,start,j);
digui(aa,start+1,end);
swap(aa,start,j);
}
}
}
}
方法二 字典序递归
public class Main {
static int aa[]= {1,2,3};
static int bb[]=new int[aa.length];
public static void main(String[] args) {
pailie(0);
}
public static void pailie(int dibiao) {
if(dibiao==aa.length) {
shuchu();
return;
}
else {
for(int i=0;i<aa.length;i++) {
int p=aa[i];
if(cishu(bb,p)<cishu(aa,p)) {//bb中次数小于a中次数时
bb[dibiao]=p;
pailie(dibiao+1);
bb[dibiao]=0;
}
}
}
}
private static void shuchu() {
for(int i=0;i<bb.length;i++) {
System.out.print(bb[i]);
}
System.out.println();
}
public static int cishu(int ku[],int x) {//返回数组中x出现 的次数
int sum=0;
for(int z:ku) {
if(z==x) {
sum++;
}
}
return sum;
}
}