JZ29 顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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 == null) return res;
        
        int rl = 0, rh = matrix.length-1; //记录待打印的矩阵上下边缘
        int cl = 0, ch = matrix[0].length-1; //记录待打印的矩阵左右边缘
        while(true){
            
            for(int i = cl; i <= ch; i++) {
                res.add(matrix[rl][i]);//从左往右
            }
            
            if(++rl > rh) 
                break; //若超出边界,退出
            
            for(int i=rl; i<=rh; i++) 
                res.add(matrix[i][ch]);//从上往下
            
            if(--ch < cl) 
                break;
            
            for(int i=ch; i>=cl; i--) 
                res.add(matrix[rh][i]);//从右往左
            
            if(--rh < rl) 
                break;
            
            for(int i=rh; i>=rl; i--) 
                res.add(matrix[i][cl]);//从下往上
            
            if(++cl > ch) 
                break;
        }
        return res;
    }
}

 

posted on 2022-06-16 12:02  MaXianZhe  阅读(12)  评论(0编辑  收藏  举报

导航