螺旋遍历二维数组(顺时针打印矩阵),剑指offer,力扣

目录

题目地址:

我们直接看题解吧:

审题目+事例+提示:

思路(模拟):

代码:

题目地址:

LCR 146. 螺旋遍历二维数组 - 力扣(LeetCode)

今天刷螺旋遍历二维数组(顺时针打印矩阵),大家有兴趣可以点上看看题目要求,试着做一下。

我们直接看题解吧:

审题目+事例+提示:

题目的意思是从一个二维数组中按照螺旋矩阵形式取出对应的元素

思路(模拟):

  1. 判断若数组为空,则返回一个空数组
  2. 初始化矩阵4个边界,上下左右t,b,l,r,以及对应的打印列表res;
  3. 循环遍历:即从左往右,从上到下,从右到左,从下到上

          ·array 数组对应的元素依次赋值到res

          ·边界依次缩1

           ·判断边界是否相遇(是否打印完毕),是则break

     4. 返列表res;

代码:

class Solution {
    public int[] spiralArray(int[][] array) {
        if(array.length == 0) return new int[0];
        int l = 0, r = array[0].length - 1, t = 0, b = array.length - 1, x = 0;
        int[] res = new int[(r + 1) * (b + 1)];
        while(true) {
            for(int i = l; i <= r; i++) res[x++] = array[t][i]; // left to right
            if(++t > b) break;
            for(int i = t; i <= b; i++) res[x++] = array[i][r]; // top to bottom
            if(l > --r) break;
            for(int i = r; i >= l; i--) res[x++] = array[b][i]; // right to left
            if(t > --b) break;
            for(int i = b; i >= t; i--) res[x++] = array[i][l]; // bottom to top
            if(++l > r) break;
        }
        return res;
    }
}


相似题目对比分析:

做完这道题,再做下面这道题会对螺旋矩阵有更深理解

螺旋矩阵II,力扣-CSDN博客

这两道题主要区别在于:

     1、

      上面这道是从一个二维数组按照螺旋矩阵形式取出对应的元素 

      下面这道是将一个整数按照螺旋矩阵方式放入一个二维数组中(从0开始)

   2、

       上面这道题的二维数组是长度n*m(即边界不等长),即对应为一个矩阵

        而上面这道题二维数组是长度n*n(即边界等长),即对应为一个方阵

       这也就意味着,上面这道题会出现重复打印的情况因为最后一圈有可能退化为只有一行,只有一列,甚至只有一个数, 因此要注意进行判断是否    出现相遇,越界

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值