随笔 - 384  文章 - 0  评论 - 0  阅读 - 13万

剑指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 }
复制代码
posted on   我不想一直当菜鸟  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示