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