剑指offer 面试必考题 40. 顺时针打印矩阵 java

Acwing 40. 顺时针打印矩阵 java面试必考题

原题链接

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

数据范围
矩阵中元素数量 [0,400]。

代码案例:输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

题解

(模拟) O(n2)
我们顺时针定义四个方向:上右下左。
从左上角开始遍历,先往右走,走到不能走为止,然后更改到下个方向,再走到不能走为止,依次类推,遍历 n2个格子后停止。

class Solution {
    public int[] printMatrix(int[][] matrix) {
       
         if(matrix == null || matrix.length == 0 || matrix[0].length == 0){//先判断是否为0 
            return new int[0];
        }
         int n = matrix.length, m = matrix[0].length;
          int [] res = new int[n*m];
        int[] dx = {-1,0,1,0};int[] dy = {0,1,0,-1};//上右下左
        boolean[][] stu = new boolean[n][m];//判定是否走过
        int x = 0 , y = 0 , d = 1 ;//起始点是0,0 方向是右
        for(int i = 0 ; i < res.length ; i++){
            res[i] = matrix[x][y];
            stu[x][y] = true ;
            int a = x + dx[d] ;
            int b = y + dy[d];
            if(a < 0 || a >= n || b < 0 || b >= m || stu[a][b] ){//撞墙之后 在重新计算下一个位置
                d = (d + 1)% 4 ; 
               a = x + dx[d];
              b = y + dy[d];
            }
            x = a ; y = b ;
        }
        return res ; 
        
    }
}
posted @   依嘫  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示