是否有任何算法可以實現這種輸出組合? 輸入: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