今天工作中遇到一个问题需要一个组合数算法。google了一会,没有找到合适的,于是就自己写了一个。主要是用了一个递归算法。发出来分享一下,有用的着的就拿去,觉得写得不好的就拍点砖,提点建议。
import java.util.*;
public class Combination
{
public static void main(String[] args)
{
Vector testData = new Vector(Arrays.asList(1, 2, 3, 4, 5, 6));
Vector results = getAllCombinations(testData);
for(int i=0; i<results.size(); i++)
System.out.println(results.elementAt(i));
}
public static Vector getAllCombinations(Vector data)
{
Vector allCombinations = new Vector();
for(int i=1; i<=data.size(); i++)
{
Vector initialCombination = new Vector();
allCombinations.addAll(getAllCombinations(data, i));
}
return allCombinations;
}
public static Vector getAllCombinations(Vector data, int length)
{
Vector allCombinations = new Vector();
Vector initialCombination = new Vector();
combination(allCombinations, data, initialCombination, length);
return allCombinations;
}
private static void combination(Vector allCombinations, Vector data,
Vector initialCombination, int length)
{
if(length == 1)
{
for(int i=0; i<data.size(); i++)
{
Vector newCombination = new Vector(initialCombination);
newCombination.add(data.elementAt(i));
allCombinations.add(newCombination);
}
}
if(length > 1)
{
for(int i=0; i<data.size(); i++)
{
Vector newCombination = new Vector(initialCombination);
newCombination.add(data.elementAt(i));
Vector newData = new Vector(data);
for(int j=0; j<=i; j++)
newData.remove(data.elementAt(j));
combination(allCombinations, newData, newCombination, length - 1);
}
}
}
}
测试结果:
[1]
[2]
[3]
[4]
[5]
[6]
[1, 2]
[1, 3]
[1, 4]
[1, 5]
[1, 6]
[2, 3]
[2, 4]
[2, 5]
[2, 6]
[3, 4]
[3, 5]
[3, 6]
[4, 5]
[4, 6]
[5, 6]
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 2, 6]
[1, 3, 4]
[1, 3, 5]
[1, 3, 6]
[1, 4, 5]
[1, 4, 6]
[1, 5, 6]
[2, 3, 4]
[2, 3, 5]
[2, 3, 6]
[2, 4, 5]
[2, 4, 6]
[2, 5, 6]
[3, 4, 5]
[3, 4, 6]
[3, 5, 6]
[4, 5, 6]
[1, 2, 3, 4]
[1, 2, 3, 5]
[1, 2, 3, 6]
[1, 2, 4, 5]
[1, 2, 4, 6]
[1, 2, 5, 6]
[1, 3, 4, 5]
[1, 3, 4, 6]
[1, 3, 5, 6]
[1, 4, 5, 6]
[2, 3, 4, 5]
[2, 3, 4, 6]
[2, 3, 5, 6]
[2, 4, 5, 6]
[3, 4, 5, 6]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 6]
[1, 2, 3, 5, 6]
[1, 2, 4, 5, 6]
[1, 3, 4, 5, 6]
[2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
分享到:
- 2009-03-05 00:12
- 浏览 1583
- 评论(3)
- 论坛回复 / 浏览 (3 / 7427)
- 查看更多
相关推荐
6位数,共有几种排列组合的算法,java实现
NULL 博文链接:https://xieyan30.iteye.com/blog/1814117
System.out.println("对整数数组进行组合:C(n,n)"); int[] intArray=new int[4]; for(int i=0;i;i++){ intArray[i]=i+1; } System.out.println("对整数数组进行组合:C(4,4)"); Combination ...
排列组合算法实现,支持模板类。支持重复数的排列。算法采用递归方法,简单易懂。
用Java实现的词频统计,代码。为了统计词汇出现频率,最简单直接的做法是另外建一个Map:key是单词,value是次数。将文章从头读到尾,读到一个单词就到Map里查一下,如果查到了则次数加一,没查到则往Map里一扔。...
文档中涵盖了有序数组合并的基本概念,包括如何将两个有序数组合并为一个,以及如何在Java中实现合并有序数组。此外,文档还包括一个逐步指南,介绍了如何在Java中实现合并有序数组,包括详细的代码示例和实现细节。...
网上找了些java实现24点小游戏的算法,看了一下,头都晕了! 自己写了一个类,各位可以看一下思路,如果需要的话,只要实例化PointGame类并在构造方法里传递参与计算的四个数字和需要的结果就好了,然后调用get...
组合数学中六种全排列算法详细解析,对于自学很有帮助哦,这里没有代码。
• 排列组合 • 格雷码(Gray Code) • 产生可能的集合 • m元素集合的n个元素子集 • 数字拆解 排序 • 得分排行 • 选择、插入、气泡排序 • Shell 排序法 - 改良的插入排序 • Shaker 排序法 - 改良的...
排列组合 格雷码(Gray Code) 产生可能的集合 m元素集合的n个元素子集 数字拆解 排序 得分排行 选择、插入、气泡排序 Shell 排序法 - 改良的插入排序 Shaker 排序法 - 改良的气泡排序 Heap ...
java代码-使用java生成一个固定位数的随机字符串,并加密,和用户密码加密后的密文组合的源代码 ——学习参考资料:仅用于个人学习使用!
List<String> location=new ArrayList(); 一行代码轻松搞定混合排序问题 Collections.sort(location, new SortUtils(true));
java求组合数算法-从M个数中取出N个数
排列组合 格雷码(Gray Code) 产生可能的集合 m元素集合的n个元素子集 数字拆解 排序 得分排行 选择、插入、气泡排序 Shell 排序法 - 改良的插入排序 Shaker 排序法 - 改良的气泡排序 Heap 排序法 - ...
全排列的非递归实现。输入1,2,3 得到 [1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]六种组合
独立开发,实测可用, 将阿拉伯和中文数字组合的字符串转成阿拉伯数字的整型 包。例如: “八万三千20”就可以转成整型 803020 。解压后,引用包。调用方法 在UnitTest.java 中有
主要介绍了Java获得一个数组的指定长度排列组合算法,结合实例形式分析了java排列组合相关数组遍历、运算操作技巧,需要的朋友可以参考下
在Java实现中,归并排序通过递归调用mergeSortHelper方法将数组划分为更小的子数组,并在最后使用merge方法将有序子数组合并成一个完整的数组。归并排序虽然需要额外的空间来存储临时数组,但其稳定的性能和可并行化...
ORC基于组合特征的高效数字识别算法 用java实现 大家可以参考一下情况
2-SAT可满足性 2-Satisfiability AC自动机 Aho-Corasick-Automaton 单源最短路径(SPFA) Bellman-Ford(Queue-...组合数的递推求解 Combination(Recursion) 枚举组合 Combination 基本的复数类 Complex-Number 割点