蓝桥杯常用算法知识点:【递归】求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.每个元素都举行一次与后面元素交换元素的事,不需要回溯!!!
相关文章推荐
- iOS项目发布提交出现invalid code signing entitlements错误。
- div设置 margin-left, margin-right 为 auto 时在IE的怪异模式下不居中
- 【转】android四大组件--ContentProvider详解
- nodejs中package.json文件模块依赖的版本格式
- 【leetcode】【190】Reverse Bits
- 文件压缩原理
- JS eval()函数
- loadCache之实习那些事
- ida入门(4)
- MXNet自定义目标函数
- 如果需要修改表格,在eclipse 中需要做什么操作
- 欧几里得算法和Stein算法【数论】
- iOS 7及以上,随时改变UIStatusBar颜色
- 一个数学问题
- CentOS6.6系统源代码安装mysql5.5.28教程(附源码包下载地址)+sysbench的安装
- 【转】单例模式(Singleton)
- 复用代码
- 笔记:ios开发基础
- 使用eclipse直接生成so文件
- 问题 A: 省赛专用题(1)