class Solution {
public:
int rows, columns;
void solve(vector<vector<char>>& board) {
rows = board.size();
columns = board[0].size();
for(auto i = 0; i < rows; ++i){
dfs(board, i, 0); //左边界
dfs(board, i, columns - 1); //右边界
}
for(auto j = 0; j < columns; ++j){
dfs(board, 0, j); //上边界
dfs(board, rows - 1, j); //下边界
}
for(auto i = 0; i < rows; ++i){
for(auto j = 0; j < columns; ++j){
if(board[i][j] == 'A')
board[i][j] = 'O';
else if(board[i][j] == 'O')
board[i][j] = 'X';
}
}
}
void dfs(vector<vector<char>>& board, int row, int column){
//如果超过边界或者不是‘O’
//只有包含边界上的O的区域才会被保留,先把存在边界上的O的所有区域改为A
//那么剩下的O就是包裹在内部的,也就是要改为X的
if(row < 0 || row >= rows || column < 0 || column >= columns || board[row][column] != 'O'){
return;
}
board[row][column] = 'A'; //和边界上的O接触过的都先换成A
dfs(board, row - 1, column); //上
dfs(board, row, column - 1); //左
dfs(board, row + 1, column); //下
dfs(board, row, column + 1); //右
}
};
Accepted
58/58 cases passed (12 ms)
Your runtime beats 69.35 % of cpp submissions
Your memory usage beats 58.44 % of cpp submissions (9.8 MB)