我正在尝试查找多个数组中项目的所有组合。数组的数量是随机的(可以是 2、3、4、5...)。每个数组中的元素数量也是随机的。
例如,我有 3 个数组:
String[][] array1 = {{"A1","A2","A3"},{"B1","B2","B3"},{"C1","C2"}};
我想生成一个包含所有可能组合的数组:
A1, B1, C1 A1, B1, C2 A1, B2, C1 A1, B2, C2 A1, B3, C1 A1, B3, C2 A2, B1, C1 A2, B1, C2 ...
最佳答案
您可以使用“类似计数器”的策略来创建组合,即将这些数组视为数字的数字,如下所示:
public static String[][] generateCombinations(String[]... arrays) {
if (arrays.length == 0) {
return new String[][]{{}};
}
int num = 1;
for (int i = 0; i < arrays.length; i++) {
num *= arrays[i].length;
}
String[][] result = new String[num][arrays.length];
// array containing the indices of the Strings
int[] combination = new int[arrays.length];
for (int i = 0; i < num; i++) {
String[] comb = result[i];
// fill array
for (int j = 0; j < arrays.length; j++) {
comb[j] = arrays[j][combination[j]];
}
// generate next combination
for (int j = arrays.length-1; j >= 0; j--) {
int n = ++combination[j];
if (n >= arrays[j].length) {
// "digit" exceeded valid range -> back to 0 and continue incrementing
combination[j] = 0;
} else {
// "digit" still in valid range -> stop
break;
}
}
}
return result;
}
该方法的调用方式如下:
generateCombinations(
new String[]{"A1","A2","A3"},
new String[]{"B1","B2","B3"},
new String[]{"C1","C2"}
)
或者像这样:
generateCombinations(array1)
关于java - JAVA组合生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30502830/