剑指 Offer 29. 顺时针打印矩阵

该博客主要介绍了如何使用Java实现二维矩阵的螺旋遍历。代码中定义了一个名为`spiralOrder`的方法,该方法接收一个二维整数矩阵作为输入,并返回一个按螺旋顺序排列的数组。方法使用了四个边界变量`l`, `r`, `t`, `b`分别表示当前遍历区域的左右上边界,随着遍历进行不断收缩。遍历过程中,先从左到右,然后从上到下,接着从右到左,最后从下到上,直到遍历完整个矩阵。每一步遍历后,都会检查边界是否越界,若满足`l>r`或`t>b`则结束遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
原题链接

  1. 注意:在程序开始的位置要添加判断的条件,否则不通过
  2. 使用while(true) 的形式来判断,而不要使用while( index < x)的形式
  3. 在每次收缩之后,判断是否越界的时候,来判断是否要break
  4. 在判断越界条件的时候,会出现 l = r 或者 t = b 的情况,故要把截止条件限定为 l > r 或者 t > b 等等
class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if(matrix.length == 0) return new int[0];
        int row = matrix.length;
        int col = matrix[0].length;
        int l = 0, r = col - 1, t = 0, b = row - 1;
        //定义了数组的长度
        int[] res = new int[row * col];
        int index = 0;
        while(true){
            //从左向右
            for(int i = l; i <= r; i++) res[index++] = matrix[t][i];
            t++;
            if(t > b) break;
            //从上到下
            for(int i = t; i <= b; i++) res[index++] = matrix[i][r];
            r--;
            if(r < l) break;
            //从右到左
            for(int i = r; i >= l; i--) res[index++] = matrix[b][i];    
            b--;
            if(b < t) break;
            //从下到上
            for(int i = b; i >= t; i--) res[index++] = matrix[i][l];               
            l++;
            if(l > r) break;
        }
        return res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值