是否有任何算法可以实现这种输出组合? 输入:java中两个列表的组合
arr1 = {x, y, z}
arr2 = {a, b}
输出:
xa, ya, za
xa, ya, zb
xa, yb, za
xa, yb, zb
xb, ya, za
xb, ya, zb
xb, yb, za
xb, yb, zb
是否有任何算法可以实现这种输出组合? 输入:java中两个列表的组合
arr1 = {x, y, z}
arr2 = {a, b}
输出:
xa, ya, za
xa, ya, zb
xa, yb, za
xa, yb, zb
xb, ya, za
xb, ya, zb
xb, yb, za
xb, yb, zb
它可能是2的幂3(arr2.length功率arr1.length)。这应该给出行数。
所以你需要一个算法来计算每一行。数字越小,指数越长。
static char[] arr1 = {'x', 'y', 'z'};
static char[] arr2 = {'a', 'b'};
public static void main(String[] args) {
print(new char[arr1.length - 1], 0);
}
static void print(char[] store, int depth) {
for(char c : arr2) {
if(depth < store.length) {
store[depth] = c;
print(store, depth + 1);
} else {
for(int i = 0; i < store.length; i++) {
System.out.print(arr1[i] + "" + store[i] + ", ");
}
System.out.println(arr1[depth] + "" + c);
}
}
}
编辑:忍不住尝试@ DenisKulagin的方法,所以这里有云:
public static void main(String[] args) {
char[] arr1 = {'x', 'y', 'z'};
char[] arr2 = {'a', 'b'};
for(int i = 0; i < 1 << arr1.length; i++) {
for(int j = 0; j < arr1.length; j++) {
int inverted = arr1.length - 1 - j;
int index = (i & (1 << inverted)) >>> inverted;
System.out.print(arr1[j] + "" + arr2[index] + " ");
}
System.out.println();
}
}
不是很灵活,因为我的版本,因为arr2
只能包含2个元素,但绝对是一个聪明的方法。
这不是一个笛卡尔产品 – shmosel 2015-02-12 08:00:07
还有什么?您将列表1的每个项目与列表2的每个项目组合在一起。我错了吗? – NwDev 2015-02-12 08:01:54
这只会产生6个项目。 – shmosel 2015-02-12 08:03:59