剑指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 ;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)