剑指offer:顺时针打印矩阵

一、题目描述

  输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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

 

二、代码

public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
       ArrayList<Integer> res = new ArrayList<>();
        if(matrix.length==0||matrix[0].length==0){
            return res;
        }
        int sR = 0;
        int sC = 0;
        int eR = matrix.length-1;
        int eC = matrix[0].length-1;
        
        while(sR<=eR&&sC<=eC){
            printEdge(matrix, sR++, sC++, eR--, eC--, res);
        }
        return res;
    }
    
    //打印一圈
    public static void printEdge(int[][] matrix,int sR,int sC,int eR,int eC,ArrayList<Integer> res){
        if(sR==eR){
            for(int i=sC;i<=eC;i++){
                res.add(matrix[sR][i]);
            }
        }else if(sC==eC){
            for(int i=sR;i<=eR;i++){
                res.add(matrix[i][sC]);
            }
        }else{
            int curSR = sR;
            int curSC = sC;
            
            //向右
            while(curSC!=eC){
                res.add(matrix[sR][curSC]);
                curSC++;
            }
            
            //向下
            while(curSR!=eR){
                res.add(matrix[curSR][eC]);
                curSR++;
            }
            
            //向左
            while(curSC!=sC){
                res.add(matrix[eR][curSC]);
                curSC--;
            }
            
            //向上
            while(curSR!=sR){
                res.add(matrix[curSR][sC]);
                curSR--;
            }
        }
            
    }
}

 

  

posted @ 2020-01-29 15:04  DXYE  阅读(112)  评论(0编辑  收藏  举报