列举全排列的递归算法的java代码实现
来源:互联网 发布:网络爬虫贴吧 编辑:程序博客网 时间:2024/05/22 12:53
在很多情况下,我们需要使用程序列举出一个数组或一个字符串中所有元素的全排列,一种最简单易懂的全排列算法就是递归算法,其算法思想如下:
1、想要得到一个n个元素的全排列,只需要先拿出第一个元素,把剩下的元素全排列,得到 (n-1)! 个排列。
2、再把第一个元素分别放在剩下的n-1个元素所形成的n个空格中(包括两端),于是得到 n*(n-1)!=n! 个排列。
3、递归出口是n=1,那么就只有一个排列。
因此,我们只需要编写一个递归方法,就可以得到全排列,代码如下:
import java.util.Scanner;/** * 递归算法列举全排列 * @author hqj * */public class FullPermutation { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.next(); //获取输入的字符串 StringBuffer strb=new StringBuffer(str); StringBuffer[] sb = fun(strb); for(StringBuffer s:sb){ System.out.println(s); } } //递归的求全排列的方法,返回一个StringBuffer的数组,存储所有排列的情况 private static StringBuffer[] fun( StringBuffer strb){ if(strb.length()==1){ StringBuffer[] sb=new StringBuffer[1]; sb[0] = strb; return sb; }else{ StringBuffer[] sb=new StringBuffer[(int) factorial(strb.length())]; StringBuffer tem = new StringBuffer(strb.toString()); tem.deleteCharAt(0); StringBuffer[] last = fun(tem); int index=0; for(int i = 0;i<strb.length()-1;i++){ for(int j = 0;j<last.length;j++){ //System.out.println(last[j]); StringBuffer temp = new StringBuffer(last[j].toString()); sb[index++]=temp.replace(i, i+1, strb.charAt(0)+""+temp.charAt(i)+""); //System.out.println(sb[index-1]); } } for(int k = 0;k<last.length;k++){ StringBuffer temp = new StringBuffer(last[k].toString()); sb[index++]=temp.append(strb.substring(0, 1)); } return sb; } } //求阶乘的方法 private static long factorial(int i){ long re =1; for(int j = i;j>0;j--){ re*=j; } return re; }}
运行截图如下:
君科沃特
韶山供销惠农
0 0
- 列举全排列的递归算法的java代码实现
- 全排列的递归实现(java代码)
- 递归实现的全排列算法
- 全排列算法的非递归实现
- 全排列递归算法的实现
- 使用递归实现全排列的算法
- 全排列算法的递归实现
- 全排列的递归实现算法
- 实现全排列的递归算法
- 递归:全排列的java实现
- 全排列的递归算法
- 全排列的递归算法
- 全排列的递归算法
- 全排列的递归算法!
- 全排列的递归算法
- 全排列的递归算法
- 全排列算法的递归与非递归实现
- 全排列算法的递归与非递归实现
- 从源程序到可执行程序详细过程及unix环境下具体过程(程序员须知)
- hdu1385
- 198. House Robber LeetCode
- 算法设计与应用基础:第十一周(1)
- 拓扑排序-java
- 列举全排列的递归算法的java代码实现
- 文章标题
- 一分钟教你破解intelliJ idea 2017
- JAVA 中的匿名内部类总结
- 10小时之内,暴力破解SSH账号的IP
- bzoj 2251 [2010Beijing Wc]外星联络
- 信息安全工程师 学习笔记 (一)
- 算法作业HW10:Leetcode92 Reverse Linked List II
- centos7中发布项目并安装mysql数据库