使用递归对数组元素进行全排列

本文介绍了一种使用递归实现数组全排列的方法。核心思路是将数组分为前后两个部分,递归处理前一部分与后一部分的一个元素进行全排列。在递归过程中,当指针到达数组末尾时打印当前排列,然后回溯以进行下一次排列。通过这种方式,可以得到数组的所有可能排列组合。
摘要由CSDN通过智能技术生成

该全排列算法的核心在于使用递归,使得整个数组能够分成两块,相当于前面一块为一个整体,与后面的一个字母进行全排列,而前面的整整体也是通过全排列形成的,故满足要求。

例子中我们使用abcd四个元素,我们分成abc整体和d整体,当递归的开始指针指向数组的最后一个位置时,即end,打印该数组,打印出abcd;下一次递归abd为整体,c为另一部分的整体,递归到该次的尽头打印的为abdc;依次这样,能够打印出数组的全排列,重要的是每一次递归到尽头之后,需要对数组进行还原,方便进行下一次的递归。

总结一下:全排列就是从数组第一个位置起每个元素分别与它后面的元素一一交换,交换完之后记得返回到最初的位置

package cn.book.exercise;


public class BokkExercise1 {
public static int len = 1;
public static void main(String[] args) {
char[] str = {'a','b','c','e','f'};
perm(str,0,str.length-1); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值