簡體   English   中英

Java中數字的所有二進制組合的列表

[英]List of all binary combinations for a number in Java

我正在開展一個涉及“動態編程”的項目,我對這個微不足道的事情感到震驚,請幫忙。

假設我將4作為輸入,我想顯示類似於:0000到1111的內容

但是,如果我輸入5,我想顯示如下:00000到11111,依此類推。

提前致謝,

編輯 :請不要發布問我代碼。 這不是一個家庭作業問題,我不需要任何代碼,只需告訴我它的邏輯,我會很高興。

EDIT2 :WTH正在發生Stackoverflow,我問過你們有沒有為我編寫代碼? 我希望那個投票贊成它的人。 如果我不能幫忙,這個論壇有什么意義?

與我分享邏輯。 我們可以討論,我不需要這個代碼。

編輯3 :我在這里發布我嘗試過的代碼。 我希望這個“滿意”所有想到我沒有嘗試過的人。

import java.util.ArrayList;

公共類RegularInvestigator {

public ArrayList createCombinations(ArrayList listOfFlightNumbers){

ArrayList<String> result = new ArrayList<String>();

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<String> 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<String> res = new ArrayList<String>();

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

return res;

}}

編輯4 :謝謝phoxis,PengOne,Jerry Coffin和oliholz的寶貴答案:)

  • 獲取輸入n
  • 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);
    }
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM