`
sunwinner
  • 浏览: 203430 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

组合的问题,递归实现

 
阅读更多

输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有abcabacbcabc

假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;

public class Combination {
    public static void combiantion(char chs[]){
        if(chs == null || chs.length == 0){
            return;
        }

        List<Character> list = new ArrayList<Character>();
        for(int i = 1; i <= chs.length; i++){
            combine(chs, 0, 3, list);
        }
    }

    //从字符数组中第begin个字符开始挑选number个字符加入list中
    public static void combine(char[] cs, int begin, int number, List<Character> list){
        if(number == 0){
            System.out.println(list.toString());
            return;
        }

        if(begin == cs.length){
            return;
        }

        list.add(cs[begin]);
        combine(cs, begin + 1, number - 1, list);
        list.remove((Character)cs[begin]);
        combine(cs, begin + 1, number, list);
    }

    public static void main(String args[]){
        char chs[] = {'a','b','c', 'd', 'e'};
        combiantion(chs);
    }
}

参考:http://shukuiyan.iteye.com/blog/1095637

分享到:
评论

相关推荐

    N选M的所有组合(递归与非递归实现)

    以下是一个简单的递归实现: 1. 初始化一个空的结果集合。 2. 定义一个递归函数,接收当前已选择的元素集合和剩余未选择元素的索引。 3. 如果已选择元素的数量等于M,将当前组合添加到结果集合。 4. 对于每个未选择...

    全组合的递归实现JAVA

    全排列的非递归实现。输入1,2,3 得到 [1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]六种组合

    递归算法实现组合(c语言实现,平台:Automation Studio@AR system)

    ### 组合算法与递归实现 #### 组合算法简介 组合算法的目标是从n个不同元素中选择k个元素的所有可能组合。例如,从1到10这10个数字中选择3个数字的所有组合方式。组合算法的应用场景非常广泛,如概率计算、密码学...

    基于hadoop用并行递归实现排列组合运算

    ### 基于Hadoop用并行递归实现排列组合运算 #### 背景介绍与问题描述 在计算机科学领域,数字排列组合是经典的算法问题之一,它不仅通俗易懂,而且对于初学者来说非常友好。通过这个问题的学习,我们可以很好地...

    案例排列组合(递归)

    这个名为"案例排列组合(递归)"的主题聚焦于如何利用递归方法来实现排列和组合的计算。递归是一种强大的编程技术,它允许函数调用自身以解决复杂的问题。 首先,我们需要理解排列和组合的概念。排列是指从n个不同...

    组合递归算法【原创】

    在本案例中,我们关注的是一个名为"MyComposite.java"的文件,这很可能是一个Java程序,它展示了如何使用组合递归来解决问题。 在Java中,递归通常涉及类、方法和对象的层次结构。"MyComposite.java"可能定义了一个...

    排列与组合的Java递归实现.doc

    排列与组合的Java递归实现.doc

    易语言递归法取排列组合例程

    本例程通过递归法实现了在易语言中获取排列组合的方法,这在处理大量数据或需要进行各种可能性计算的问题时非常有用。 递归法是解决此类问题的经典策略,它通过将问题分解成更小的子问题来解决。在排列组合问题中,...

    背包问题递归算法C语言

    **背包问题递归算法在C语言中的实现** 背包问题是一个经典的计算机科学问题,它涉及到在给定容量限制的背包中,如何选择物品以达到最大的价值。这个问题通常被用来模拟资源有限的情况下的决策优化,比如投资组合...

    Java排列组合算法分析和代码实现

    1. 递归的理解和实现:理解递归的基本思想,掌握如何在实际问题中构建递归函数。 2. 回溯法的应用:在排列问题中,回溯法是一种有效的解决方案,它能避免生成重复的排列。 3. 位运算的理解:在组合算法中,位运算的...

    C++递归实现八皇后问题

    八皇后问题是一个经典的问题,在棋盘上放置八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一对角线上。...在实际编程中,这种解决问题的方式常用于解决各种组合优化问题。

    简单背包问题算法(非递归实现的)

    本文档将详细介绍简单背包问题的非递归实现算法。该算法旨在解决背包问题,即如何在有限的背包容量下,选择合适的物品,使得总价值达到最大。 算法原理 简单背包问题可以描述为:给定一个背包,容量为s,和n个物品...

    归并排序的非递归实现

    归并排序的非递归实现是使用迭代的方式来实现归并排序算法的,这种方法可以避免递归函数可能引发的栈溢出错误或其他问题。通过使用临时数组来存储中间结果,可以避免对原始数组的修改。这种方法的时间复杂度为O(n ...

    递归实现组合型枚举.md

    递归实现组合型枚举.md

    递归实现n重循环

    使用递归实现N重循环,这里的N是不确定的。 此代码实现的功能描述如下: 1. 有一个字符串的矩阵,用vector&lt; vector&lt; CStirng &gt; &gt; 表示 2. 行与行之间进行排列组合 3. 输出所有组合的方式

    使用递归实现n重for循环

    使用递归的方式来替代for来实现不同行与行之间进行组合。 输入(1,2,3)(4,5,6) 得到 (1 4)(1 5)(1 6)(2 4)(2 5)(2 6)(3 4)(3 5)(3 6)

    实验二递归与分治

    在集合划分问题中,我们使用递归思想来解决问题,通过将集合分解成小问题,然后将小问题的解组合起来,解决原始问题。 实验结果 通过本实验,我们了解了递归算法和分治法的基本思想和实现方法。我们实现了快速排序...

    全排序算法c++递归实现

    ### 全排序算法C++递归实现解析 #### 一、引言 全排序(也称为全排列)...全排列的递归实现虽然简单直观,但在实际应用中可能面临效率问题。通过采用迭代或并行处理等优化手段,可以在一定程度上提高算法的执行效率。

    递归求解几类排列组合问题

    递归求解几类排列组合问题 递归是一种常用的算法,它是搜索的另一种实现方式。如果在算法设计中采用一个函数或过程直接或间接地调用它自身来解决问题的方法,则称该方法为递归算法。递归算法必须要设计好一个或若干...

Global site tag (gtag.js) - Google Analytics