数组全排列(元素不重复) java递归实现

全排列作为一个经典的递归问题,就是把一个大问题分解为若干个相互独立的子问题,这些子问题相互独立且与原问题相同。
递归的解这些子问题,然后将这些子问题的解合并得到原问题的解。举个例子,1234的全排列 就等于1(234)的全排列+2(134)的全排列+3(214)+4(231)全排列,同理依次类推。

其中java出现的问题就是swap函数不能像c++那样很简单的用指针或者&引用来交换,这里我使用了数组来进行交换。

话不多说,上代码:

public class perm {
	static void swap(char c[],int index1,int index2)//用数组来实现数值的交换
	{
		char temp=c[index1];
		c[index1]=c[index2];
		c[index2]=temp;	
	}
	
	static void Perm(char c[],int k,int n)
	{
		if(k==n)
		{
			for(int i=0;i<=n;i++)
			{
				System.out.print(c[i]+" ");
			}
			System.out.println();
		}
		else{
			for(int i=k;i<=n;i++)//后面的数依次和k位置的值交换
			{
				swap(c,k,i);
				Perm(c,k+1,n);//递归
				swap(c,k,i);//下一次排列之前,先使数组恢复成原样。
			}
		}
	}
	
	public static void main(String[] args) {
		char c[]={'a','b','c','d'};
		Perm(c,0,3);
	}
	
}

结果如下:

a b c d 
a b d c 
a c b d 
a c d b 
a d c b 
a d b c 
b a c d 
b a d c 
b c a d 
b c d a 
b d c a 
b d a c 
c b a d 
c b d a 
c a b d 
c a d b 
c d a b 
c d b a 
d b c a 
d b a c 
d c b a 
d c a b 
d a c b 
d a b c 
 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值