描述:1,2,3......n 从n中取出r个数。
例如:n=5,r=3
1-2-3,1-2-4,1-2-5,1-3-4,1-3-5,1-4-5
2-3-4,2-3-5,2-4-5
3-4-5
下面是我的解决方法,还有其他的方法么?
java 代码
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Set;
- import java.util.Stack;
-
- public class Combination {
- private List result;
- private int r = 4;
- private int n = 7;
-
- public Combination() {
- result = new ArrayList();
- Stack permutation = new Stack();
- for (int i = 1; i < r + 1; i++) {
- permutation.push(i);
- }
- result.add(permutation);
- }
-
- public static void main(String[] args) {
- Combination com = new Combination();
- com.compose(com.result.size());
- com.removeExisted();
- com.sortList();
- com.print();
- }
-
- private void sortList() {
- List sorted = new ArrayList();
- for (Iterator iter = result.iterator(); iter.hasNext();) {
- Stack element = (Stack) iter.next();
- StringBuffer sb = new StringBuffer();
- for (Iterator iterator = element.iterator(); iterator.hasNext();) {
- int i = (Integer) iterator.next();
- sb.append(i + "-");
- }
- sb.deleteCharAt(sb.length()-1);
- sorted.add(sb.toString());
- }
- Collections.sort(sorted);
- result=sorted;
- }
-
- private void removeExisted() {
- Set set = new HashSet();
- for (Iterator iter = result.iterator(); iter.hasNext();) {
- set.add(iter.next());
- }
- result.clear();
- result.addAll(set);
- }
-
- private void print() {
- System.out.println("result:");
- for (Iterator iter = result.iterator(); iter.hasNext();) {
- String element = (String) iter.next();
- System.out.println(element);
- }
- }
-
- private void compose(int size) {
- for (int i = 0; i < size; i++) {
- Stack element = (Stack) result.get(i);
- int max = (Integer) element.peek();
- if (max == n) {
- return;
- } else {
- Stack copyedS = copyStack(element);
- ++max;
- createNewComS(copyedS, max);
- }
- }
- compose(result.size());
- }
-
- private void createNewComS(Stack original, int max) {
- for (int i = 0; i < r; i++) {
- Stack copyedS = copyStack(original);
- copyedS.remove(i);
- copyedS.push(max);
- result.add(copyedS);
- }
- }
-
- private Stack copyStack(Stack element) {
- Stack copyed = new Stack();
- for (int i = 0; i < element.size(); i++) {
- int num = (Integer) element.get(i);
- copyed.push(num);
- }
- return copyed;
- }
- }
分享到:
- 2007-08-15 23:12
- 浏览 1512
- 评论(0)
- 论坛回复 / 浏览 (0 / 2770)
- 查看更多
相关推荐
**C++递归思想详解** 递归是一种强大的编程技术,尤其在C++中,它能够以简洁优雅的方式解决复杂的问题。递归的核心在于函数或算法自身调用自身,通过不断缩小...通过理解和实践递归,可以解决许多看似复杂的计算问题。
总之,Koch曲线是一个引人入胜的数学对象,它体现了分形几何的魅力,同时也是一个理解和实践递归算法的实用案例。无论是在理论研究还是实际应用,如图像处理、游戏设计或艺术创作,Koch曲线都有其独特的价值。通过...
《C语言实现递归解24点游戏》 24点游戏是一款广受欢迎...尽管存在小缺陷,但这个小程序为我们提供了一个很好的学习和实践递归算法的平台。在完善和优化的过程中,我们不仅能提升编程技能,还能进一步掌握C语言的精髓。
总的来说,这个项目结合了编程基础、算法设计、图形用户界面和交互逻辑,是一个很好的学习和实践递归及C# WinForm编程的实例。通过这个项目,开发者不仅可以提升对递归的理解,还能提高GUI编程技巧,同时享受到编程...
实验指导书中会包含具体的步骤、示例代码以及操作流程,以帮助学生理解和实践递归下降分析。 首先,理解递归下降分析的关键在于构造解析函数。每个解析函数对应文法的一个产生式,如果产生式的右部只有一个非终结符...
总之,这个实验提供了一个实践递归下降语法分析的机会,使学生能够在实际编程中巩固编译原理课程中的理论知识,同时也培养了他们解决语法分析问题的能力。通过这样的实验,学生能够更好地理解和应用编译器设计的基本...
先通过汉诺塔游戏引入递归概念,然后通过解决斐波那契兔子问题来实践递归编程。 8. **预备知识**:学生需要掌握基本的程序设计知识,如解析法、穷举法、查找法和排序法,以及用计算机解决问题的基本流程。 9. **...
由于没有更详细的信息,我们只能推测"digui"可能是一个自定义的解析器或工具,用于帮助理解和实践递归下降算法。它可能包含了具体的解析函数,每个函数对应文法的一个规则,并通过递归调用来解析源代码。 **实现...
在编程领域,尤其是在数据结构和算法的学习中,树形结构是一种非常重要的概念。它用于模拟具有层次关系的数据,比如文件系统、...但是,这个基本框架提供了一个良好的起点,让你能够理解和实践递归以及树形结构的概念。
8. **学习资源**:“day20_DiGui”可能包含了关于递归的实例代码、练习题和讲解材料,通过这些资源,你可以更深入地理解和实践递归。 通过学习和实践,掌握递归不仅可以提高编程能力,还能让你在面对复杂问题时有更...
除了理论分析,文章还提供了实现递归算法的程序代码和主函数示例,这对于学生理解并实践递归算法设计尤为重要。代码示例不仅包括单链表的节点定义和递归函数的编写,还涉及如何在主函数中调用这些递归函数来完成特定...
在算法设计领域,递归与分治是两种非常重要的策略,尤其在解决复杂问题时,它们能提供简洁而高效的解决方案。...通过学习和实践递归与分治,我们可以提高编程能力和问题解决能力,更好地应对各种计算挑战。
总的来说,这个压缩包提供了实践递归算法的良好机会,有助于深入理解递归的思想和Java编程基础。通过学习和实践这两个问题,开发者不仅可以掌握递归的运用,还能进一步提升对Java 8特性的认识。对于初学者来说,这是...
在编程领域,递归算法是一种强大的工具,它通过函数或过程调用自身的方式来解决问题。递归的核心在于将复杂的问题分解为简单的...通过`Combination.java`和`Test.java`这样的示例,我们可以更好地理解和实践递归算法。
对于初学者,这样的资源是理解和实践递归分形的宝贵资料。 “毕达哥拉斯树”是压缩包中的文件名,这很可能是指一种特定的分形图案。毕达哥拉斯树源于古希腊数学家毕达哥拉斯的名字,它是由一系列等腰三角形构成的,...
### 编译原理中的递归下降分析算法 #### 基本概念与目的 递归下降分析算法是编译原理...通过实践递归下降分析,学习者可以有效提升自己的编程技巧和工程设计能力,为进一步的学术研究或职业发展奠定坚实的技术基础。
在编程领域,递归算法是一种基于...总之,这个压缩包提供的实例展示了如何运用递归算法来生成九宫图,帮助开发者理解和实践递归编程技巧,尤其在解决约束条件下的搜索问题时,递归算法往往能提供简洁且高效的解决方案。
在JavaScript编程领域,LeetCode是一个非常重要的在线平台,它提供了大量的编程题目,帮助开发者提升算法能力和解决问题的...同时,对于想要提升编程能力的开发者,理解和实践递归与回溯也是提升技术实力的关键步骤。
总的来说,这个毕业设计项目为学生提供了一个实践递归模糊神经网络和Simulink相结合的平台,不仅锻炼了编程能力,也加深了对智能控制理论的理解。通过深入研究和操作,学生将能够掌握这一领域的核心技术和方法,为...
通过《BiTree》这个文件,我们可以实践以上理论,编写递归和非递归的遍历算法,并通过实际示例加深理解。这有助于提升对数据结构的理解,增强算法设计和实现能力。在学习过程中,可以尝试不同的数据结构和优化策略,...