Java Leetcode解决方案与本地环境(周围区域)的工作方式不同

Java Leetcode解决方案与本地环境(周围区域)的工作方式不同,java,algorithm,Java,Algorithm,我通读了这篇社论,编了一个解决方案。一切都是有意义的,在本地,我的代码将电路板更改为预期的输出,但当我将代码粘贴到Leetcode时,我的电路板保持不变。我使用了他们的调试器,并在第24行放置了一个断点,果然,我在电路板上没有看到任何更改 我不知道还有什么地方可以问这个问题,所以如果这里不合适,我很抱歉 以下是我的代码: import java.util.Arrays; class Solution { private int ROWS; private int COLS; pu

我通读了这篇社论,编了一个解决方案。一切都是有意义的,在本地,我的代码将电路板更改为预期的输出,但当我将代码粘贴到Leetcode时,我的电路板保持不变。我使用了他们的调试器,并在第24行放置了一个断点,果然,我在电路板上没有看到任何更改

我不知道还有什么地方可以问这个问题,所以如果这里不合适,我很抱歉

以下是我的代码:

import java.util.Arrays;

class Solution {
  private int ROWS;
  private int COLS;

  public void solve(char[][] board) {
    ROWS = board.length;
    COLS = board[0].length;

    // parse left and right borders
    for (int i = 0; i < ROWS; i++) {
      DFS(board, i, 0); // left border
      DFS(board, i, ROWS - 1); // right border
    }

    // parse top and bottom borders
    for (int j = 0; j < COLS; j++) {
      DFS(board, 0, j); // top border
      DFS(board, COLS - 1, j); // bottom border
    }

    // after parsing, we end up with x, o, e board. Pass through it, and change 
    // 1) o to x
    // 2) e to o
    for (int i = 0; i < ROWS; i++) {
      for (int j = 0; j < COLS; j++) {
        if (board[i][j] == 'o') {
          board[i][j] = 'x';
        }
        else if (board[i][j] == 'e') {
          board[i][j] = 'o';
        }
      }
    }
  }

  private void DFS(char[][] board, int i, int j) {
    if (i >= ROWS || j >= COLS) return; // bounds
    if (board[i][j] != 'o') return;

    board[i][j] = 'e'; // temporary marker, to help identify border-connected cells
    // go right
    DFS(board, i, j + 1);
    // go down
    DFS(board, i + 1, j);
    // go left
    DFS(board, i, j - 1);
    // go up
    DFS(board, i - 1, j);
  }

  public static void main (String[] args) {
    char[][] test1 = new char[][] {
      {'x','x','x','x'},
      {'x','o','o','x'},
      {'x','x','o','x'},
      {'x','o','x','x'}
    };

    new Solution().solve(test1);
    Arrays.stream(test1).forEach(e -> System.out.println(Arrays.toString(e)));
  }
}
导入java.util.array;
类解决方案{
私有int行;
私人公司;
公共无效解决(字符[][]板){
行=板长度;
COLS=线路板[0]。长度;
//解析左边框和右边框
对于(int i=0;i=ROWS | | j>=COLS)返回;//边界
如果(板[i][j]!=“o”)返回;
线路板[i][j]=“e”;//临时标记,用于帮助识别边界连接的单元
//向右转
DFS(董事会,i,j+1);
//下降
DFS(董事会,i+1,j);
//向左走
DFS(董事会,i,j-1);
//上升
DFS(董事会,i-1,j);
}
公共静态void main(字符串[]args){
char[][]test1=新char[][]{
{'x','x','x','x','x'},
{'x','o','o','x'},
{'x','x','o','x'},
{'x','o','x','x'}
};
新解决方案().solve(test1);
stream(test1).forEach(e->System.out.println(Arrays.toString(e));
}
}
在本地运行它,我得到了控制台中所期望的结果

[x,x,x,x]

[x,x,x,x]

[x,x,x,x]


[x,o,x,x]

您的主要问题是,您的代码采用小写字母o和x的矩阵,而LeetCode问题则给出大写字母o和x的矩阵。由于
'o'
'o'
不同,
'x'
'x'
不同,您的代码无法解决LeetCode问题

将来,我建议在复制测试用例时使用复制和粘贴,以便您完全正确地获得它们


既然我在这里,我还将指出代码中的另外两个问题:

  • 深度优先搜索的逻辑确保您永远不会离开网格的底部或右边缘,但它无法确保您永远不会离开网格的顶部或左边缘。(您的测试用例不会触发它,因为在该测试用例的顶部或左侧边缘没有O。)
  • 您的代码中有各种各样的注释,这些注释都是关于“解析”的,而实际上您并没有这样做。(请参阅。)显然,这不会影响代码的行为,但它会让读者感到困惑,或者至少让您看起来有点不知所措。我建议编写(例如)
    //找到所有连接到左右边框的O,并将它们更改为E

非常感谢。我一直认为“解析”只是指“通过”,所以谢谢你指出这一点。