[递归]全排列例子&java代码

全排列是指从n个不同元素中取出m个元素,按照一定的顺序排列起来,所有的排列情况构成全排列。文章通过一个4个数字的例子解释了全排列的概念,并提供了一段Java代码,使用递归方法实现全排列。代码中,通过交换数组元素并递归处理子数组来生成所有可能的排列组合。
摘要由CSDN通过智能技术生成

什么是全排列

把一组数组所有的排序可能都列出来就是全排列。

例子:

如果给1,2,3,4做全排列,第一个位置上就有4种可能1,2,3,4,假设第一个为4了,剩下的第二个位置可能是1,2,3,假设第二个位置是1,剩下的第三个位置可能是2,3,假设第三位置为3,最后一个位置是2,便可以输出为4,1,3,2,同理,如果到顺序第一个位置是3,便对剩下的3个数做递归排序……

 

子问题和父问题是同一件事并不断简单,有一个出口,便可以用递归。

代码如下:

public class QuanPaiLie {
    public static void main(String[] args) {
        int[] a={1,2};
        f(a);
    }
    private static void f(int[] a) {
        f(a,0);
    }
    private static void f(int[] a, int start) {
        if (start==a.length-1){//开始位置到了末尾,结束条件
            System.out.println(Arrays.toString(a));//便打印输出数组
            return;//
        }
        for (int i = start; i <a.length ; i++) {//遍历数组
            swap(a,i,start);//i的值和start的值交换,第一个元素和后面的做交换,递归调用子数组做排序
            f(a,start+1);//对start+1开始的范围,递归进行全排列
            swap(a,i,start);//i的值和start的值交换,把第一个元素交换回来
        }
    }
    private static void swap(int[] a, int i, int start) {
        int tem=a[i];
        a[i]= a[start];
        a[start]=tem;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值