问题描述:
Given a 2D board containing 'X'
and 'O'
(the letter O), capture all regions surrounded by 'X'
.
A region is captured by flipping all 'O'
s into 'X'
s in that surrounded region.
Example:
X X X X
X O O X
X X O X
X O X X
After running your function, the board should be:
X X X X
X X X X
X X X X
X O X X
Explanation:
Surrounded regions shouldn’t be on the border, which means that any 'O'
on the border of the board are not flipped to 'X'
. Any 'O'
that is not on the border and it is not connected to an 'O'
on the border will be flipped to 'X'
. Two cells are connected if they are adjacent cells connected horizontally or vertically.
源码:
这题应该leetcode出bug了,一直报错,我看了DISCUSS区同样遇到了,默认的代码都会报错。自己写了一个递归的函数,不知道对不对,后面等修复好了再回来看吧。抱歉。
今天leetcode网站好像修好了,时间99%,空间100%。
class Solution {
public:
void dfs(vector<vector<char>>& board, int row, int col){
int rows = board.size(), cols = board[0].size();
// cout<<row<<" "<<col<<endl;
board[row][col] = '1';
if(row-1>0 && board[row-1][col]=='O'){
dfs(board, row-1, col);
}
if(row+1<rows &&board[row+1][col]=='O'){
dfs(board, row+1, col);
}
if(col-1>0 && board[row][col-1]=='O'){
dfs(board, row, col-1);
}
if(col+1<cols && board[row][col+1]=='O'){
dfs(board, row, col+1);
}
}
void solve(vector<vector<char>>& board) {
int rows = board.size();
if(rows == 0) return;
int cols = board[0].size();
if(cols == 0) return;
for(int i=0; i<cols; i++){
if(board[0][i] == 'O') dfs(board, 0, i);
}
for(int i=1; i<rows; i++){
if(board[i][cols-1] == 'O') dfs(board, i, cols-1);
}
for(int i=cols-2; i>=0; i--){
if(board[rows-1][i] == 'O') dfs(board, rows-1, i);
}
for(int i=rows-2; i>=1; i--){
if(board[i][0] == 'O') dfs(board, i, 0);
}
for(int i=0; i<rows; i++){
for(int j=0; j<cols; j++){
if(board[i][j] == '1') board[i][j] = 'O';
else board[i][j] = 'X';
}
}
}
};