您的位置:首页 > 编程语言 > Java开发

求组合算法实现_二进制数_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代码实现如下:

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