g***j 发帖数: 1275 | 1 Surrounded Regions ,就是把所有的不与边界相连的一大片O 转换成X
大家帮我看看这段code 哪儿错了? 大集合过不了
class Solution {
public:
void solve(vector> &board) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int row = board.size();
if(row == 0) return;
int col = board[0].size();
if(col == 0) return;
for(int i = 0; i < col; i++) {
flooding(board, 0, i);
flooding(board, row-1, i);
}
for(int i = 1; i <= row-2; i++) {
flooding(board, i, 0);
flooding(board, i, col-1);
}
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
if(board[i][j] == 'O')
board[i][j] = 'X';
else if(board[i][j] == '@')
board[i][j] = 'O';
}
}
}
void flooding(vector > &board, int i, int j) {
int row = board.size();
int col = board[0].size();
if(i < 0 || j < 0 || i >= row || j >= col || board[i][j] != 'O')
return;
board[i][j] = '@';
flooding(board, i-1,j);
flooding(board, i, j-1);
flooding(board, i+1, j);
flooding(board, i, j+1);
}
}; | g**G 发帖数: 767 | 2 c++不清楚,但你java这么写,这个题是肯定要stack overflow的……
建议用iterative的方法写。
(to leetcode,这个题是不是考虑考虑改改大集合的判分标准,我优化了半天还是跑了
好几次才凑巧过了一次……) | p****e 发帖数: 3548 | 3 改成这样就可以了
class Solution {
public:
int row, col;
void solve(vector> &board) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
row = board.size();
if(row == 0) return;
col = board[0].size();
if(col == 0) return;
for(int i = 0; i < col; i++) {
flooding(board, 0, i);
flooding(board, row-1, i);
}
for(int i = 1; i <= row-2; i++) {
flooding(board, i, 0);
flooding(board, i, col-1);
}
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
if(board[i][j] == 'O')
board[i][j] = 'X';
else if(board[i][j] == '@')
board[i][j] = 'O';
}
}
}
void flooding(vector > &board, int i, int j) {
if(i < 0 || j < 0 || i >= row || j >= col || board[i][j] != 'O')
return;
board[i][j] = '@';
flooding(board, i-1,j);
flooding(board, i, j-1);
flooding(board, i+1, j);
flooding(board, i, j+1);
}
}; | g***j 发帖数: 1275 | 4 请问为啥把row 和col拿出来就有变化了呢? stack overflow么?
【在 p****e 的大作中提到】 : 改成这样就可以了 : class Solution { : public: : int row, col; : void solve(vector> &board) { : // Start typing your C/C++ solution below : // DO NOT write int main() function : row = board.size(); : : if(row == 0) return;
| p****e 发帖数: 3548 | 5 每次调用size()函数是要耗时的
而且你写在递归里面,要进栈出栈,也是耗时的
【在 g***j 的大作中提到】 : 请问为啥把row 和col拿出来就有变化了呢? stack overflow么?
|
|