剑指offer_ 顺时针打印矩阵

题目描述

下图的矩阵顺时针打印结果为:1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10

 

 解题思路

 1 import java.util.ArrayList;
 2 public class Solution {
 3     public ArrayList<Integer> printMatrix(int [][] matrix) {
 4         ArrayList<Integer> ret = new ArrayList<>();
 5        int r1=0;int c1=0;int r2=matrix.length-1; int c2=matrix[0].length-1;
 6        while(r1 <= r2 && c1 <= c2){
 7            for(int i=c1;i<=c2;i++){
 8                ret.add(matrix[r1][i]);
 9            }
10            for(int i=r1+1;i<=r2;i++){
11               ret.add(matrix[i][c2]);
12            }
13           if (r1 != r2)
14           for(int i=c2-1;i>=c1;i--){
15                ret.add(matrix[r2][i]);               
16            }
17            if (c1 != c2)
18            for(int i=r2-1;i>=r1+1;i--){
19                ret.add(matrix[i][c1]);
20            }
21           r1++; r2--; c1++; c2--;
22            
23        }
24         return ret;
25     }
26 }

 

r1,c1相当于左上角点的横纵坐标,r2,c2相当于右下角点的横纵坐标

注意两个特殊情况

 

posted @ 2019-08-30 11:31  chyblogs  阅读(115)  评论(0)    收藏  举报