剑指Offer 019顺时针打印矩阵

019顺时针打印矩阵
题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

方法:递归法
思路:转换为一个依次打印每一圈的函数,按照顺时针来打印,直到左上角等于右下角就停止
代码:

ArrayList<Integer> res = new ArrayList<>();
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        if(matrix==null||matrix.length==0) return new ArrayList<>();
        int tR = 0;
        int tC = 0;
        int dR = matrix.length-1;
        int dC = matrix[0].length-1;
        while (tR<=dR&&tC<=dC){
            print(matrix,tR++,tC++,dR--,dC--);//左上角的+1,右下角的-1
        }
        return res;
    }
    public void print(int[][] num,int tR,int tC,int dR,int dC){//打印一圈的函数
        if(tR==dR){//当只剩下一行
            for (int i = tC; i <=dC; i++) {
                res.add(num[tR][i]);
            }
        }else if(tC==dC){//当只剩下一列
            for (int i = tR; i <=dR; i++) {
                res.add(num[i][tC]);
            }
        }else{
            int curR=tR;//临时创建变量来记
            int curC=tC;
            while(curC!=dC){
                res.add(num[tR][curC]);//从左到右
                curC++;
            }
            while(curR!=dR){
                res.add(num[curR][dC]);//从上到下
                curR++;
            }

            while(curC!=tC){
                res.add(num[dR][curC]);//从右到左
                curC--;
            }
            while(curR!=tR){
                res.add(num[curR][tC]);//从下到上
                curR--;
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值