算法:二维数组打印问题
题目
给出一个二维数组:[[1,2,3],[4],[5,6]]。在每个数组元素中取一个数字,然后打印出来。打印结果是 145,146,245,246,345,346这种。
分析
把给出的元素列一下
1 2 3
4
5 6
在每层取一个元素,我们定义层级变量是row.
在每层取一个元素,我们定义每层的角标是 i。
思路就是使用递归,递归的退出条件就是 层级达到最大,我们在每个层级按照循环取出来元素。
代码
/*** 打印* @param arr 给出的原始的二维数组* @param row 层数* @param curr 当前要打印的元素拼接* @param result 结果集,这个看需求*/public void print(int[][] arr, int row, String curr, List<String> result){/**判断递归的跳出条件 **/if(row == arr.length) {result.add(curr);System.out.println(curr);return;}/** 在每一层做循环 **/for(int i = 0; i < arr[row].length ; i++ ){/** 在此处递归,当第一个元素打印出来后,比如145已经打印,此处是在[5,6]数组循环。继续循环6就可以了 **/print(arr, row+1, curr + String.valueOf(arr[row][i]), result);}}public static void main(String[] args) {int[] a1 = {1,2,3};int[] a2 = {4};int[] a3 = {5,6};int[][] ints = new int[][]{a1, a2,a3};ErWeiShuZhuDaYin dy = new ErWeiShuZhuDaYin();List<String> objects = new ArrayList<>();dy.print(ints, 0, "", objects);