【问题标题】:Peculiar behavior of *java loops* in *leet code**leet 代码* 中 *java 循环* 的特殊行为
【发布时间】:2022-12-31 19:02:27
【问题描述】:

我一直在LeetCode.com 上解决这个名为63. Unique Paths II 的问题。我需要一些预填充,为此我需要运行这个循环。


    for (int row = 1; row < grid[0].length; row++) {
       if (grid[row][0] == 1) {
          grid[row][0] = 0;
          break;
       }
       grid[row][0] = 1;
    }

很明显,如果 index(在本例中为 row 迭代器)变得等于正在考虑的 array 的长度,那么它应该退出循环。但就我而言,它给出了这个错误

java.lang.ArrayIndexOutOfBoundsException:索引 1 超出范围 第 18 行的长度 1,第 54 行的 Solution.uniquePathsWithObstacles,驱动解决方案.帮手在第 84 行,司机。主要的

这是一种奇特的。我错过了什么或者它很奇怪吗?

这是我的完整代码,我的方法不应该作为讨论的部分,因为如果有问题我想自己找出来。现在我想听听我上面提到的特殊行为。


    class Solution {
        public int uniquePathsWithObstacles(int[][] grid) {
    
            if(grid[0][0] == 1 || grid[grid.length - 1][grid[0].length - 1] == 0){
                return 0;
            }
    
            for(int col = 1; col < grid.length; col ++){
                if(grid[0][col] == 1){
                    grid[0][col] = 0;
                    break;
                }
                grid[0][col] = 1;
            }
    
    
            for(int row = 1; row < grid[0].length; row ++){
                if(grid[row][0] == 1){
                    grid[row][0] = 0;
                    break;
                }
                grid[row][0] = 1;
            }
    
            for(int i = 1; i < grid.length; i ++){
                for(int j = 1; j < grid[i].length; j ++){
                    grid[i][j] = grid[i][j] != 1 ? grid[i - 1][j] + grid[i][j - 1] : 0;
                }
            }
            return grid[grid.length - 1][grid[0].length - 1];
        }
    }

【问题讨论】:

  • 而第 54 行?
  • 我删除了那个诡计,这是一个错误。

标签: java arrays


【解决方案1】:

你犯了一个错误

  • 如果你像grid[row][i]那样迭代,条件应该是row&lt;grid.length
  • 如果你像grid[i][row]那样迭代,条件应该是row &lt; grid[i].lengthrow &lt; grid[i].length可接受,如果所有行的长度都相同)

所以你的循环应该是

for (int col = 1; col < grid[0].length; col++) {
    if (grid[0][col] == 1) {
        grid[0][col] = 0;
        break;
    }
    grid[0][col] = 1;
}

for (int row = 1; row < grid.length; row++) {
    if (grid[row][0] == 1) {
        grid[row][0] = 0;
        break;
    }
    grid[row][0] = 1;
}

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 2011-06-03
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多