Java使用递归实现全排列的代码

将写内容过程经常用到的一些内容备份一下,下边内容是关于Java使用递归实现全排列的内容。

public class AllPermutation
{
    public static void main(String[] args)
    {
        char[] source=new char[]{‘A‘,‘B‘,‘C‘};
        char[] result=new char[source.length];
        allPermutation(0,source,result);    

    }
    public static void allPermutation(int index,char[] source,char[] result){
        if(source.length==1){
            result[index]=source[0];
            show(result);
            return ;
        }

        for(int i=0;i<result.length-index;i++){
            result[index]=source[i];
            char[] newSource=getNewSource(source,source[i]);
            allPermutation(index+1, newSource,result);
        }
    }
    public static void show(char[] result){
        System.out.println(result);
    }
    public static char[] getNewSource(char[] source,char c){
        char[] newSource=new char[source.length-1];
        for(int i=0,j=0;i<source.length;i++){
            if(source[i]!=c){
                newSource[j]=source[i];
                j++;
            }
        }
        return newSource;
    }
}

原文地址:http://blog.51cto.com/14129678/2345892

时间: 2024-10-10 03:29:00

Java使用递归实现全排列的代码的相关文章

Java用递归实现全排列,详细

package edu.cqu.algorithmTest; import java.util.Scanner; // 全排列,递归实现 public class Main8 { public static void main(String[] args) { int[] arr = { 1, 2, 3}; bfs(arr, 0, arr.length - 1); } public static void bfs(int []a,int start,int end) { /* * 递归的终点是,

java非递归检索文件夹下所有文件的代码

把开发过程比较重要的一些内容段做个珍藏,下面的内容段是关于java非递归检索文件夹下所有文件的内容,应该是对大家有所帮助. DateFormat df = DateFormat.getDateTimeInstance();LinkedList<File> folders = new LinkedList<File>();LinkedList<File> filelists = new LinkedList<File>();File dir = new Fil

Java 实现m个数全排列组合以及从M中选取N个数(有序)

(1)全排列组合的递归规律: 集合s的全排列组合 all(s)=n+all(s-n);其中n为已经取出的集合 以集合 s={1,2,3}为例,则s的全排列组合为all(s)={1}+all({2,3});其中n={1},s-n={2,3} 通过以上例子,我们可以知道上述算法可以用递归来解决. 我们取极端情况,如果集合s为空,那么说明不需要再进行递归. 全排列组合,如果集合有4个元素,则全排列组合的个数为 A(4,4)=4*3*2*1=24种,代码如下: package dataStructer;

Java API —— 递归

1.方法定义中调用方法本身的现象 2.递归注意实现 1) 要有出口,否则就是死递归 2) 次数不能太多,否则就内存溢出 3) 构造方法不能递归使用 3.递归解决问题的思想和图解: 例子1:求5的阶乘 package diguidemos; /** * Created by gao on 15-12-27. */ /* * 需求:请用代码实现求5的阶乘. * * 有几种方案实现呢? * A:循环实现 * B:递归实现 * a:做递归要写一个方法 * b:出口条件 * c:规律 */ public

黑马程序员——Java基础---递归

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!                                                                       递归 Java支持递归. 递归是根据自身定义内容的过程.就java编程而言,递归是一个允许方法调用自身的特征. 调

Java实现字符数组全排列

import org.junit.Test; public class AllSort { public void permutation(char[] buf, int start, int end) { if (start == end) {// 当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可 for (int i = 0; i <= end; i++) { System.out.print(buf[i]); } System.out.println(); } else {//

java 中递归的实现 以及利用递归方法实现汉诺塔

今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于编程来说,每次递归都会减少数据量: java中递归的模式 每个递归函数的开头一定是判断递归结束条件是否满足的语句(一般是if语句):函数体一定至少有一句是"自己调用自己"的.每个递归函数一定有一个控制递归可以终结的变量(通常是作为函数的参数而存在).每次自己调用自己时,此变量会变化(一般是

递归实现全排列(一)

[思路] 下面用具体例子来阐述这种实现的思路,例如实现123的全排列组合. 要求123的全排列,可以分为以下情况: 情况1:第0位为1+23的全排列 情况2:第0位为2+13的全排列 情况3:第0位为3+32的全排列 上面的情况用代码实现如下: //情况1 //为了跟下面一致,加上swap(list[0],list[0]); perm(list,1,2); //为了跟下面一致,加上swap(list[0],list[0]); //情况2 swap(list[0],list[1]); perm(l

Java多层目录打包和解压代码(apache commons compress, io, lang)

Java多层目录打包和解压代码(apache commons compress, io, lang) package zip;   import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Fil