小小牛ing 2023-05-12 15:05 采纳率: 25%
浏览 3

Leetcode 54. 螺旋矩阵为什么数组会下标越界

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        boolean[][] mark = new boolean[m][n];
        List<Integer> res = new ArrayList<>();
        int i = 0, j = 0;
        while(res.size() < m*n) {
            while(j < n && mark[i][i] == false) {
                res.add(matrix[i][j]);
                mark[i][j] = true;
                j++;
            }
            j--;
            while(i < m && mark[i][j] == false) {
                res.add(matrix[i][j]);
                mark[i][j] = true;
                i++;
            }
            i--;
            while(j >= 0 && mark[i][j] == false) {
                res.add(matrix[i][j]);
                mark[i][j] = true;
                j--;
            }
            j++;
            while(i >= 0 && mark[i][j] == false) {
                res.add(matrix[i][j]);
                mark[i][j] = true;
                i--;
            }
            i++;
        }
        return res;
    }
}

Leetcode 54. 螺旋矩阵
为什么数组会下标越界?

  • 写回答

2条回答 默认 最新

  • Leodong. 2023-05-12 15:14
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    在您提供的代码中,可能会出现数组下标越界的问题。具体来说,当 ij 取到边界时,循环仍然会继续执行,导致数组下标越界。

    例如,在第一个 while 循环中,当 j 达到 n 时,下一次循环仍然会执行 matrix[i][j],这将导致数组下标越界。

    为了解决这个问题,您可以在每次循环之前检查数组下标是否越界,如果越界,则退出循环。例如,在第一个 while 循环中,您可以添加以下检查:

    while(j < n && mark[i][j] == false) {
        res.add(matrix[i][j]);
        mark[i][j] = true;
        j++;
    }
    j--;
    

    在这里,我们首先检查 j < n 是否成立,如果成立,则执行循环体,否则退出循环。

    您可以对其他循环也进行类似的修改,以避免数组下标越界的问题。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论

报告相同问题?

问题事件

  • 创建了问题 5月12日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址