难度:中等。
标签:深度优先搜索,广度优先搜索,并查集,数组,矩阵。
这个题竟然把我整懵了,感觉不难,但是不知道如何用深搜,想到了需要从四周向中间进行搜索,但是还没想明白。
看了题解,非常妙。
正确解法:
class Solution {
int rows, cols;
void dfs(vector<vector<char>>& board, int i, int j){
if(i < 0 || i >= rows || j < 0 || j >= cols || board[i][j] != 'O')return;
board[i][j] = 'V';
dfs(board, i - 1, j);
dfs(board, i + 1, j);
dfs(board, i, j - 1);
dfs(board, i, j + 1);
}
public:
void solve(vector<vector<char>>& board) {
rows = board.size();
if(rows <= 0)return;
cols = board[0].size();
if(rows <= 2 || cols <= 2)return;
for(int i = 0; i < rows; ++i){
dfs(board, i, 0);
dfs(board, i, cols - 1);
}
for(int j = 0; j < cols; ++j){
dfs(board, 0, j);
dfs(board, rows - 1, j);
}
for(int i = 0; i < rows; ++i){
for(int j = 0; j < cols; ++j){
if(board[i][j] == 'V'){
board[i][j] = 'O';
}
else if(board[i][j] == 'O'){
board[i][j] = 'X';
}
}
}
}
};
结果: