利用递归实现N层嵌套循环

题目描述:长度为 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); // 向下传递的逻辑

            }

        }

    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。