题目描述:长度为 N 的二维数组,每一层取一个 element,打印所有可能的组合。
例如:matrix = {{'a','b'},{'@'}}, 则所有的组合为:
a @
b @
分析:假设每一层元素个数为:m1, m2, m3...m(i)...m(n), 则所有可能的组合共有:
m1 * m2 ...*m(i)...*m(n),显然这是一个 n 层嵌套循环,由于 n 的值无法确定,因此我们无法像下面的代码 一样实现 n 层嵌套循环:
for (int i=0; i<matrix[0].length;++i)
for(int j=0;j<matrix[1].length;++j)
...
自然想到可以用 递归的方式来实现,层层传 “递” 下去,直到第 n 层(终止条件),然后再层层回 “归” 回来,直到第一层,然后打印结果。
class Solution {
public void printMatrixRecursively(char[][] matrix) {
printMatrixRecursively(0,matrix,""); // 从第0层开始传递
}
private void printMatrixRecursively(int index, char[][] matrix, String str) {
for(int k=0; k<matrix[index].length; ++k) {
char ch = matrix[index][k];
String tmpStr = str + " " + ch;
if (index == matrix.length-1) {
System.out.println(tmpStr); // 终止条件
} else {
printMatrixRecursively(index+1, matrix, tmpStr); // 向下传递的逻辑
}
}
}