递归——数组全排列

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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读