数组全排列(元素不重复) 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);
}
}
结果如下:
【数组全排列(元素不重复) java递归实现】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
推荐阅读
- 危险也是机会
- 活着就是生命的全部意义
- 一个健康的APP和健全的人格大体类似
- 数组常用方法一
- NeuVector 会是下一个爆款云原生安全神器吗()
- 全过程工程咨询——时间管理(12)
- 别墅庭院设计,不同的别墅庭院设计也给人视觉上完全不一样的!
- 不让记忆、感觉、情绪成为孩子的负累|不让记忆、感觉、情绪成为孩子的负累|《全脑教养法》(四)
- (全员向连载)云间当铺(一)
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)