使用蛮力生成所有可能的二进制数组合作为数组?
Using Brute Force to generate all possible combination of binary numbers as array?
我想使用 Brute Force 算法生成所有可能的 {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 中使用暴力生成这些数组?如果我的问题不清楚,请告诉我,谢谢!!
首先,您需要提供代码的最小可重现示例。您可以在这里查看:https://whosebug.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]);
}
这应该会给你一个想法:
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();
}
}
我想使用 Brute Force 算法生成所有可能的 {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 中使用暴力生成这些数组?如果我的问题不清楚,请告诉我,谢谢!!
首先,您需要提供代码的最小可重现示例。您可以在这里查看:https://whosebug.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]);
}
这应该会给你一个想法:
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();
}
}