剑指offer29(Java)-顺时针打印矩阵(简单)
题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
注意:本题与 力扣 54 题 相同
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
①首先需要特别判断为空的情况,对于空矩阵直接返回空数组;
②设置二维数组四个边界:l, r, t, b
- 沿着t,从左往右遍历,遍历完后,t++;
- 沿着r,从上往下遍历,遍历完后,r--;
- 沿着b,从左往右遍历,注意这时候还要判断一下 t 和 b 的关系,因为在前面的循环中,t的值有变化,遍历完后,b--;
- 沿着l,从下网上遍历,注意这时候还要判断一下 l 和 r的关系,因为在前面的循环中,r的值有变化,遍历完后,l++;
代码:
1 class Solution { 2 public int[] spiralOrder(int[][] matrix) { 3 //特判 4 if (matrix.length == 0 || matrix[0].length == 0) return new int[0]; 5 int n = matrix.length, m = matrix[0].length; 6 int[] ans = new int[n*m]; 7 int l = 0, r = m - 1, t = 0, b = n - 1, k = 0; 8 while (l <= r && t <= b){ 9 //从左到右 10 for (int i = l; i <= r; i++){ 11 ans[k++] = matrix[t][i]; 12 } 13 t++; 14 //从上到下 15 for (int j = t; j <= b; j++){ 16 ans[k++] = matrix[j][r]; 17 } 18 r--; 19 //从右到左 20 for (int i = r; i >= l && t <= b; i--){ 21 ans[k++] = matrix[b][i]; 22 } 23 b--; 24 //从下到上 25 for(int j = b; j >= t && l <= r; j--){ 26 ans[k++] = matrix[j][l]; 27 } 28 l++; 29 } 30 return ans; 31 } 32 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!