https://leetcode.com/problems/surrounded-regions/
我通读了社论,并编写了解决方案。一切都说得通,在本地我的代码将开发板更改为预期的输出,但是当我将代码粘贴到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)));
}
}
在本地运行,我完全可以在控制台中得到预期的结果
[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。)
您的代码中有许多讨论“解析”的注释,而实际上您并没有这样做。 (请参见https://www.google.com/search?q=parsing。)显然,这不会影响代码的行为,但可能会使人类读者感到困惑,或者至少使您看起来有些笨拙。我建议写(例如)// find all O's connected to left and right borders, and change them to E's
。
关于java - Leetcode解决方案与本地环境(周围区域)不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59900754/