假设我有2组数字:
{1, 2, 3},
{4, 5}
我想创建一种算法(使用Java),该算法输出以下6种组合:
1,4
1,5
2,4
2,5
3,4
3,5
每个组中可以有任意数量的组和任意数量的成员。因此,在以上示例中,有2个组,第一个组具有3个成员,第二个组具有2个成员。另一个示例如下(3个组,第一个组中的3个成员,第二和第三组中的2个成员):
{1, 2, 3},
{4, 5},
{6, 7}
这将产生以下12种组合:
1,4,6
1,4,7
1,5,6
1,5,7
2,4,6
2,4,7
2,5,6
2,5,7
3,4,6
3,4,7
3,5,6
3,5,7
如何用Java做到这一点?我正在尝试使用递归,我已经看过similar question了,但是我仍然很简短。谢谢您的帮助! (P.S.这不是用于家庭作业)
最佳答案
有点无聊,决定试一试。应该正是您所需要的:
public static void main(String args[]) {
ArrayList<int[]> input = new ArrayList<int[]>();
input.add(new int[] { 1, 2, 3 });
input.add(new int[] { 4, 5 });
input.add(new int[] { 6, 7 });
combine(input, new int[input.size()], 0);
}
private static void combine(ArrayList<int[]> input, int[] current, int k) {
if(k == input.size()) {
for(int i = 0; i < k; i++) {
System.out.print(current[i] + " ");
}
System.out.println();
} else {
for(int j = 0; j < input.get(k).length; j++) {
current[k] = input.get(k)[j];
combine(input, current, k + 1);
}
}
}