Список всех двоичных комбинаций для числа в Java - PullRequest
3 голосов
/ 24 июня 2011

Я работаю над проектом, включающим «Динамическое программирование», и поражен этой тривиальной вещью, пожалуйста, помогите.

Предположим, я принимаю 4 в качестве ввода, я хочу отобразить что-то вроде: от 0000 до 1111

Но, если я введу 5, я хочу отобразить как: от 00000 до 11111 и т. Д.

Заранее спасибо,

РЕДАКТИРОВАТЬ : пожалуйстане пишите, спрашивая у меня код.Это не домашняя проблема, и мне не нужен какой-либо код, просто скажите мне логику для этого, и я был бы счастлив.

EDIT2 : WTH происходит со Stackoverflow, не так липопросить кого-нибудь из вас написать код для меня?Я хочу, чтобы человек, который проголосовал против, проголосовал за это.Какой смысл в этом форуме, если я не могу помочь?

Поделитесь логикой со мной.Мы можем обсудить, и мне не нужен код для этого.

EDIT3 : Здесь я публикую код, который я попробовал.Я надеюсь, что это "Удовлетворяет" всех людей, которые думали, что я ничего не пробовал.

import java.util.ArrayList;

открытый класс RegularInvestigator {

открытый ArrayList createCombitions (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;

}}

EDIT4 : Спасибо вам, Фоксис, Пенгоне, Джерри Коффину и Олихольцу за ценные ответы:)

Ответы [ 6 ]

8 голосов
/ 24 июня 2011
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);
    }
8 голосов
/ 24 июня 2011
  • Получить ввод n
  • Количество от i=0 до (2^n) - 1
  • для каждого значения i битовая маска для каждого бита i и отображения.
4 голосов
/ 24 июня 2011

Либо используйте очень хорошее решение 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
1 голос
/ 24 июня 2011

Я немного растерялся, как бы вы применили динамическое программирование к этому. Это просто счет от 0 до единицы меньше указанного максимального значения (где максимальное значение на 1 сдвинуто влево на указанное количество бит).

Редактировать: я должен добавить, что есть и другие возможности (например, серые коды), но при отсутствии какой-либо причины поступать иначе, простой двоичный счет, вероятно, проще всего реализовать.

0 голосов
/ 09 апреля 2016

вот код для поиска комбинации

/*
 * 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);
    }
}
}
0 голосов
/ 23 апреля 2015
int x = 5;

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