您的位置:首页 > 其它

蓝桥杯常用算法知识点:【递归】求n个元素的全排列

2016-03-15 15:41 211 查看
package com.aiqiongdiao;
public class Main {
/**
* 【递归】求n个元素的全排列
* abc acb bac bca cab cba
* @param args
*/
public static void f(char data[],int k){   //当前关注点k
if(k==data.length){
for(int i=0;i<data.length;i++){
System.out.print(data[i]+" ");
}
System.out.println();
}
//把第一个元素放这里,后面的元素再进行全排列
//后面的元素不能简单放过来:会覆盖!!交换即可。
for(int i=k;i<data.length;i++){   //循环中的递归就是出口
//将数组每个元素和后面的元素进行交换,然后递归
{char temp=data[k];  //试探
data[k]=data[i];
data[i]=temp;}
f(data,k+1);
/*			{char temp=data[k];   //!!:此处不需要回溯
data[k]=data[i];
data[i]=temp;}*/
}
}

public static void main(String[] args) {
//将一个String改为char数组,打印所有排列形式
char data[]= "ABC".toCharArray();    //转化为char型数组语句

f(data,0);    //传data数组
}
}


=======================================================

注意:

如果用逻辑的思路去理解很容易被绕进去。

所以现在用俯瞰大体的思想来理解它。

1.从k自身开始,与后面的交换

2.然后就将此行动退给下一级自动去做

3.每个元素都举行一次与后面元素交换元素的事,不需要回溯!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: