求组合算法实现_二进制数_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,求组合)