题解:递归法解二维数组打印问题

顺时针打印矩阵

http://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a

每次都是转圈打印,所以记二维数组的左上和右下坐标,一圈圈打印即可

public static ArrayList<Integer> printMatrix(int [][] matrix) {

        if(matrix==null||matrix.length==0)return null;
        ArrayList<Integer> res = new ArrayList<>();

        return printCircle(res,matrix,0,0,matrix.length-1,matrix[0].length-1);
    }
    private  static ArrayList<Integer> printCircle(ArrayList<Integer> res,int[][] arr,int row1,int col1,int row2,int col2){
        int curR= row1;

        int curC = col1;


        //递归结束条件

        if(col1-col2>0||row1-row2>0)
            return res;

        //如果只有一行
        if(row1==row2){
            for (int i = col1; i <=col2 ; i++) {
                res.add(arr[row2][i]);
            }
            return res;
        }else if (col1==col2){
            for (int i = row1; i <=row2 ; i++) {
                res.add(arr[i][col1]);
            }
            return res;
        }
        while (curC<col2) {
            res.add(arr[curR][curC++]);
        }

        while(curR<row2){
            res.add(arr[curR++][curC]);
        }

        while (curC>col1){
            res.add(arr[curR][curC--]);
        }

        while (curR>row1){
            res.add(arr[curR--][curC]);
        }

        return printCircle(res,arr,++row1,++col1,--row2,--col2);
    }
全部评论

相关推荐

点赞 评论 收藏
分享
04-08 10:36
已编辑
华南理工大学 C++
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务