Java中数字的所有二进制组合的列表

我正在开展一个涉及“动态编程”的项目,我对这个微不足道的事情感到震惊,请帮忙。

假设我将4作为输入,我想显示类似于:0000到1111的内容

但是,如果我输入5,我想显示如下:00000到11111,依此类推。

提前致谢,

编辑 :请不要发布问我代码。 这不是一个家庭作业问题,我不需要任何代码,只要告诉我它的逻辑,我会很高兴。

EDIT2 :WTH正在发生Stackoverflow,我问过你们有没有为我编写代码? 我希望那个投票赞成它的人。 如果我不能帮忙,这个论坛有什么意义?

与我分享逻辑。 我们可以讨论,我不需要这个代码。

编辑3 :我在这里发布我尝试过的代码。 我希望这个“满意”所有想到我没有尝试过的人。

import java.util.ArrayList; 

公共类RegularInvestigator {

public ArrayList createCombinations(ArrayList listOfFlightNumbers){

 ArrayList result = new ArrayList(); for(int i = 1; i < listOfFlightNumbers.size(); i++) { String binaryEqvivalent = Integer.toBinaryString(i);System.out.println(binaryEqvivalent); String element = ""; for(int j = 0; j < binaryEqvivalent.length(); j++) if(binaryEqvivalent.charAt(j) == '1') element += listOfFlightNumbers + " "; result.add(element.substring(0, element.length() - 1)); } return result; 

}

 private String getContent(ArrayList flight) { String temp = ""; for(int i = 0; i < flight.size() - 1; i++) temp += flight.get(i) + " "; temp += flight.get(flight.size() - 1); return temp; 

}

private ArrayList removeElementAtIndex(ArrayList flight,int position){

 ArrayList res = new ArrayList(); for(int i = 0; i < flight.size(); i++) { if(i != position) res.add(flight.get(i)); } return res; 

}}

编辑4 :谢谢phoxis,PengOne,Jerry Coffin和oliholz的宝贵答案:)

  • 得到输入
  • i=0(2^n) - 1计数
  • 对于i位掩码的每个值, i和显示的每一位。
 public void outBinary(int value){ for (int i = 0; i < Math.pow(2, value); i++) { System.out.println(Integer.toBinaryString(i)); } } 

与前导零一样的东西

  for (int i = 0; i < Math.pow(2, value); i++) { StringBuilder binary = new StringBuilder(Integer.toBinaryString(i)); for(int j = binary.length(); j < value; j++) { binary.insert( 0, '0' ); } System.out.println(binary); } 

要么使用phoxis非常好的解决方案,要么只是按字典顺序迭代它们(这实际上是相同的解决方案!):给定给定长度的二进制字符串,通过找到最右边的零条目获得下一个字典字符串,将其更改为1 ,并且将其右侧的所有内容更改回0 ,例如

 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 

关于如何将动态编程应用于此,我有点迷茫。 这只是计数从0到1小于指定的最大值(其中最大值为1左移指定的位数)。

编辑:我应该补充一点,还有其他可能性(例如,格雷码)但没有其他理由不这样做,简单的二进制计数可能是最简单的实现。

 int x = 5; for(int i = 0; i < (1 << x); i++){ System.out.println(Integer.toBinaryString(i)); } 

这里的代码是找到组合

 /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package rotateimage; /** * * @author ANGEL */ public class BinaryPermutaion { public static void main(String[] args) { //object creation BinaryPermutaion binaryDigit=new BinaryPermutaion(); //Recursive call of the function to print the binary string combinations binaryDigit.printBinary("", 4); } /** * * @param soFar String to be printed * @param iterations number of combinations */ public void printBinary(String soFar, int iterations) { if(iterations == 0) { System.out.println(soFar); } else { printBinary(soFar + "0", iterations - 1); printBinary(soFar + "1", iterations - 1); } } }