解决思路很妙:对边界进行dfs,以边界为起点,搜索到的O都不应该被替换成X,其他的O都可以被替换成X
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param board char字符型vector<vector<>>
* @return char字符型vector<vector<>>
*/
vector<vector<char> > surroundedArea(vector<vector<char> >& board) {
// write code here
int m = board.size();
int n = board[0].size();
for(int i=0; i<m; i++){
dfs(board, m, n, i, 0);
dfs(board, m, n, i, n-1);
}
for(int i=0; i<n; i++){
dfs(board, m, n, 0, i);
dfs(board, m, n, m-1, i);
}
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(board[i][j] == 'A'){
board[i][j] = 'O';
}
else if(board[i][j] == 'O'){
board[i][j] = 'X';
}
}
}
return board;
}
void dfs(vector<vector<char> >& board, int m, int n, int cur_i, int cur_j){
if(cur_i<0 || cur_i>=m || cur_j<0 || cur_j>=n){
return;
}
if(board[cur_i][cur_j] == 'X' || board[cur_i][cur_j] == 'A'){
return;
}
if(board[cur_i][cur_j] == 'O'){
board[cur_i][cur_j] = 'A';
}
dfs(board, m, n, cur_i-1, cur_j);
dfs(board, m, n, cur_i+1, cur_j);
dfs(board, m, n, cur_i, cur_j-1);
dfs(board, m, n, cur_i, cur_j+1);
}
};