java 打印螺旋矩阵

这篇博客详细介绍了如何实现二维矩阵的螺旋顺序打印,主要涉及分类讨论、数组边界处理及特殊情况处理。通过四个方向的循环遍历,确保矩阵元素依次按螺旋形状输出。在处理边界和特殊情况时,如只有一行或一列的矩阵,采取了相应的条件判断来避免重复打印。代码中给出了具体的实现逻辑,包括四种打印路径的循环,并在每次循环后更新边界。

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

牛客题目链接

1. 题目考点

  1. 分类讨论
  2. 数组边界处理
  3. 特殊情况处理

2. 考点解析

  1. 分 4 种情况讨论
// 上面 从左到右
// 右边 从上到下
// 下面 从右到左
// 左边 从下到上
  1. 边界处理
  2. 特殊情况:当数组只有一行时,为避免上下重复和左右重复打印,需要条件判断
public ArrayList<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> res = new ArrayList<>();
        if (matrix.length == 0) return res;
        int top  = 0, bottom = matrix.length - 1;
        int left = 0, right  = matrix[0].length - 1;
        int i;
        // 循环打印的结束条件
        while (top <= bottom && left <= right) {
        	// 上面 从左到右
            for (i = left; i <= right; i++)
                res.add(matrix[top][i]);
            // 右边 从上到下
            for (i = top + 1; i <= bottom; i++) 
                res.add(matrix[i][right]);
            // 下面 从右到左, top != bottom 当只有一行时避免和上面重复
            // 注意边界,i 从 right - 1 开始
            for (i = right - 1; top != bottom && i >= left; i--) 
                res.add(matrix[bottom][i]);
            // 左边 从下到上, left != right 当只有一列时避免和右边重复
            // 注意边界,i 从 bottom - 1 到 top + 1 (不是 top - 1)
            for (i = bottom - 1; left != right && i >= top + 1; i--)
                res.add(matrix[i][left]);
            top++;
            bottom--;
            left++;
            right--;
        }
        return res;
    }

3. 参考链接

  1. 牛客题解1
  2. 牛客题解2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值