我使用Java时遇到了以下问题。我将把我的代码包含在这篇文章的底部。我获得了大部分组合,但是我无法找到一种方法来使我的列变量为0,以便我的其余递归调用可以帮助我获得所有组合。该解决方案必须适用于所有尺寸的二维阵列。我希望解决方案完全是递归 - 没有循环。感谢您提供的任何见解。
给定2D阵列的定义,如下所示:
String[][] data = {
{"A", "B"},
{"1", "2"},
{"XX","YY","ZZ"}
};
编写一个递归程序,按顺序输出每个子数组的所有组合。在前面的示例中,所需的输出可能如下所示:
A 1 XX
A 1 YY
A 1 ZZ
A 2 XX
A 2 YY
A 2 ZZ
B 1 XX
B 1 YY
B 1 ZZ
B 2 XX
B 2 YY
B 2 ZZ
您的程序应该在任一维度上使用任意大小的数组。例如,考虑以下输入数组:
String[][] data = {
{"A"},
{"1"},
{"2"},
{"XX","YY"}
};
应输出:
A 1 2 YY
A 1 2 YY
到目前为止我的解决方案:
private String[][] data = {
{"A", "B"},
{"1", "2"},
{"XX","YY","ZZ"}
};
public void combinations() {
helperMethod("",0, 0);
}
private void helperMethod(String oldCombination, int row, int col) {
String newCombination = oldCombination + data[row][col];
if (row == data.length - 1) {
System.out.println(newCombination);
}
if (row < data.length - 1) {
helperMethod(newCombination, row + 1, col);
}
if (col < data[row].length - 1) {
helperMethod(oldCombination, row, col + 1);
}
}
答案 0 :(得分:1)
当您移动到下一行时,您必须将列重置为零:
if (row < data.length - 1) {
helperMethod(newCombination, row + 1, 0); // 0 instead of col
}
通过这一小改动,它似乎至少可以正常使用您提供的测试用例。