递归全排列

来源:互联网 发布:手机淘宝如何买彩票 编辑:程序博客网 时间:2024/06/01 09:46

题记:

     熟悉递归的使用,利用递归输出1-n 所有全排列可能性:

方法一:

import java.util.Scanner;public class Main{    public static void main(String[] args) {        Scanner read = new Scanner(System.in);        int n = read.nextInt();        int [] array = new int[n];        permulation(array,n,0);    }    public static void permulation(int [] array, int len,int start){        int i = 0;        boolean flag = true;        //一次排列完成,输出结果        if(len == start){            for(i =0;i<len;i++){                System.out.print(array[i]+" ");            }            System.out.println();        } else{            for (i = 1; i <= len; i++) {                flag = true;                for (int j =0 ;j <= start;j++){      //控制检查元素的循环                    if(i == array[j]){         //在赋值前进行元素检查,如果元素已经存在则不赋值跳出循环                        flag = false;                        break;                    }                }                if(flag){                    array[start] = i;                    permulation(array , len, start+1);                }            }        }    }

方法二:

public class Main{    public static void permulation(int[] array, int start, int length) {        int i;        if (start == length) {            for (i = 0; i < length; i++)                System.out.print(array[i] + " ");            System.out.println();        } else {            for (i = start; i < length; i++) {                swap(array, start, i);                permulation(array, start + 1, length);                swap(array, start, i);            }        }    }    public static void swap(int[] list, int start, int i) {        int temp;        temp = list[start];        list[start] = list[i];        list[i] = temp;    }    public static void main(String[] args) {        int array[] = new int[]{1,2,3,4,5,6,7,8,9};        permulation(array, 0, array.length);    }}
原创粉丝点击