求组合算法实现_二进制数_Java
2015-07-22 00:00
375 查看
摘要: n个元素有2n次方-1种组合,刚好对应1到2n次方-1的数字的二进制值为1的下标在数组中元素的组合。例如求数组【A、B、C】元素的组合有【A、B、C、AB、AC、BC、ABC】七种组合,即1到7的二进制表示【1、10、11、100、101、110、111】数字中值为1时的下标对应的数组元素。新手菜鸟,请大家多指点,java代码实现如下:
在main函数中运行:
后输出结果
[1]
[2]
[1, 2]
[3]
[1, 3]
[2, 3]
[1, 2, 3]
import java.util.ArrayList; import java.util.List; // TODO: Auto-generated Javadoc /** * The Class Combine. */ public class Combine { /** * Test combine. * 测试用二进制方法求组合函数 */ public static void TestCombine(int count){ //定义数组长度为count int [] numbers = new int[count]; //初始化数组 for(int i=1;i<=count;i++){ numbers[i-1] = i; } //求组合 codeCombine(numbers); } /** * Code combine. * 二进制码求组合函数 * @param inNumber */ public static void codeCombine(int[] inNumber){ List<Integer> listCombine = new ArrayList<Integer>();//用于记录组合 String codeStr = ""; //用于将记录二进制的字符串 int maxNumber = 1; //组合个数,2n次方-1 ,int最多能求元素个数为31个的数组组合, //但是元素个数大于10时会相当耗时 for(int i=0;i<inNumber.length;i++){ maxNumber = maxNumber * 2; } //循环2n次方-1,输出所有组合 for(int indexNum=1;indexNum<maxNumber;indexNum++){ //将数字转化为二进制字符串 codeStr = Integer.toBinaryString(indexNum); //遍历字符串,值为1的下标即为组合需要取的数组元素 for(int indexCode=0;indexCode<codeStr.length();indexCode++){ //从后往前遍历字符串 if(codeStr.charAt(codeStr.length()-1-indexCode) == '1'){ //从前往后取数组元素 listCombine.add(inNumber[indexCode]); } } //输出组合 System.out.println(listCombine.toString()); listCombine.clear(); //清空集合,进行下一次寻找集合 } } }
在main函数中运行:
Combine.TestCombine(3);
后输出结果
[1]
[2]
[1, 2]
[3]
[1, 3]
[2, 3]
[1, 2, 3]
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统