数组的全排列问题

来源:互联网 发布:纪检监察网络管理中心 编辑:程序博客网 时间:2024/05/16 07:48

数组的全排列是一种考察递归思想的常考题,当然题目肯定会拐几个弯的~~这里记录一下最基本的全排列的思路:


考察如下的情形:

 char[] a={'a','b','c'};
那么它的全排列是;

abc acb bac bca cba cab

分析一下步骤:

1)固定a,然后后面的两个数进行全排列

2)固定b,后面的两个数进行全排列

3)固定c,后面的两个数进行全排列

很显然这是一个递归的过程,通过递归可以很简单的解决这个问题

下面是求全排列的程序:

public class QuanPaiLie {    public static void permutation(char[] c,int start,int end){        if(end<=1){            return;        }        if(end==start){            System.out.println(c);        }        for(int i=start;i<=end;i++){            swap(c,i,start);//固定第一个数,第一个数的取值分别为数组中的每一个数            permutation(c,start+1,end);//对后n-1个数进行全排列            swap(c,start,i);//把顺序换回来        }    }    public static void swap(char[] c, int i, int j) {        char temp = c[i];        c[i] = c[j];        c[j] = temp;    }    public static void main(String[] args) {        String s="abc";        permutation(s.toCharArray(),0,s.toCharArray().length-1);    }}
总结:

求去重数组全排列的步骤如下:

1)分别在第一个位置固定每一个元素

2)对后续的n-1个数进行全排列

3)恢复本次排列中的初始状态

0 0
原创粉丝点击