JAVA递归实现对1~n全排列【附代码详细执行过程】

小白也能理解,大佬请忽视


对于像我这种算法初学者来说,递归真的是太难理解了。像全排列这种入门级别的题目,我都得绕好久,下面分享一下我对这题的理解思路和解题过程,希望能对大家理解递归的思想有一点点的帮助,欢迎大家在评论区留言讨论。

例 对1,2,3进行全排列
(1)让第一个数不同,得到3个数列:
1,2,3
2,1,3
3,2,1
以上三个数列,只要第一个数不同,不管后面n-1个数如何排列,这n个数列都是不同的。
(2)对以上3个数列每个数列去掉第一个数,对剩下的数重复(1)操作,得
2,3
3,2
1,3
3,1
2,1
1,2
(3)依旧是对每个数列去掉第一个数,重复以上操作。本例再去掉一个数就只剩一个数了,无法继续,到此结束。因此产生了6个数列:
1,2,3
1,3,2
2,1,3
2,3,1
3,2,1
3,1,2
(4)对于多个数,也是同样的处理方法。

以下是代码:

public class Main {
	
	static int[] a={1,2,3,4,5,6,7,8,9,10};
	
	public static void Solution(int begin,int end){//begin,end分别为数列的首个数和最后一个数的下标
		if(begin==end){//递归结束,产生一个全排列
			for(int i=0;i<=end;i++){//打印全排列
				System.out.print(a[i]+" ");
			}
			System.out.println();
		}else{
			for(int i=begin;i<=end;i++){
				int temp=a[begin];//交换a[begin]和a[i]
				a[begin]=a[i];
				a[i]=temp;		
				Solution(begin+1, end);//对余下的数进行全排列
				temp=a[begin];//还原a[begin]和a[i]
				a[begin]=a[i];
				a[i]=temp;
			}
		}		
	}

	public static void main(String[] args) {
		Solution(0,2);
	}
}

以下是代码执行步骤:

以上就是我对这道题的理解了,希望能够对大家有帮助!

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值