【问题标题】:Using Brute Force to generate all possible combination of binary numbers as array? [closed]使用蛮力将所有可​​能的二进制数组合生成为数组? [关闭]
【发布时间】:2020-10-28 19:15:00
【问题描述】:

我想使用蛮力算法将所有可能的 {0,1} 组合生成为数组。 比如我要生成2^3个不同组合的二进制数数组,应该是

{{0,0,0},
{1,0,0},
{0,1,0},
{0,0,1},
{1,1,0},
{0,1,1},
{1,0,1},
{1,1,1}}

如何在 java 中使用蛮力生成这些数组?如果我的问题不清楚,请告诉我,谢谢!

【问题讨论】:

  • 从 1 到 7 的循环可以做到这一点。

标签: java arrays brute-force


【解决方案1】:

首先,您需要提供代码的最小可重现示例。你可以在这里查看:https://stackoverflow.com/help/minimal-reproducible-example

关于你的问题,使用三个循环可以是一个解决方案:

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        var combinations = new ArrayList<int[]>();
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++) {
                for (int k = 0; k < 2; k++) {
                    combinations.add(new int[] {i, j, k});
                }
            }
        }
    }
}

你可以这样打印它们:

for (var c : combinations) 
{
    System.out.printf("{%d,%d,%d}%n", c[0], c[1], c[2]);
}

【讨论】:

  • 我不知道在问他们问题之前直接给似乎没有尝试过任何尝试的人提供答案的感觉如何......
  • @Musilix 我已编辑问题以建议 OP 提供最小的可重现代码示例。
  • 对于我的问题没有提供足够的信息,我深表歉意。下次我会通过阅读有关如何在 StackOverflow 中提出好问题的规则来做得更好。不过,非常感谢您的帮助。
【解决方案2】:

这应该会给你一个想法:

import java.util.Arrays;
import java.util.Scanner;

public class BruteForceBinary {
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("How many rows do you want? ");
        int rows = scanner.nextInt(); 
        int finalNumber = (int) (Math.pow(2, rows)-1); 
        for (int i = 0; i <=finalNumber; i++ )
        {
            int[] binaryArray = numberToBinaryArray(i,rows);
            
            System.out.print(Arrays.toString(binaryArray));
        }
    }

    private static int[] numberToBinaryArray(int i, int rows ) {
        String binaryString = padLeftZeros(Integer.toBinaryString(i), rows);
        int[] numbers = new int[binaryString.length()];
        for (int j = 0; j < binaryString.length(); j++ ) {
            numbers[j] = Integer.parseInt(String.valueOf(binaryString.charAt(j)));
        }
        return numbers;
    }
    
    private static String padLeftZeros(String inputString, int length) {
        if (inputString.length() >= length) {
            return inputString;
        }
        StringBuilder sb = new StringBuilder();
        while (sb.length() < length - inputString.length()) {
            sb.append('0');
        }
        sb.append(inputString);
     
        return sb.toString();
    }


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多