[剑指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。
 
 1 public class Solution {
 2     public ArrayList<Integer> printMatrix(int [][] matrix) {
 3         ArrayList<Integer> list = new ArrayList<>();
 4         if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
 5             return list;
 6         }
 7         int up = 0;
 8         int down = matrix.length-1;
 9         int left = 0;
10         int right = matrix[0].length-1;
11         while(true){
12             for(int col=left;col<=right;col++){
13                 list.add(matrix[up][col]);
14             }
15             up++;
16             if(up > down){
17                 break;
18             }
19             for(int row=up;row<=down;row++){
20                 list.add(matrix[row][right]);
21             }
22             right--;
23             if(left > right){
24                 break;
25             }
26             for(int col=right;col>=left;col--){
27                 list.add(matrix[down][col]);
28             }
29             down--;
30             if(up > down){
31                 break;
32             }
33             for(int row=down;row>=up;row--){
34                 list.add(matrix[row][left]);
35             }
36             left++;
37             if(left > right){
38                 break;
39             }
40         }
41         return list;
42     }
43 }

 

posted @ 2021-05-11 14:49  StringBuilder  阅读(67)  评论(0)    收藏  举报