class Solution {
public:
void helper(vector<vector<char>>& board, int i, int j){
if(board[i][j]=='O'){
board[i][j] = '$';
if(i-1>=0) helper(board, i-1, j);
if(j-1>=0) helper(board, i, j-1);
if(i+1<board.size()) helper(board, i+1, j);
if(j+1<board[0].size()) helper(board, i, j+1);
}
}
void solve(vector<vector<char>>& board) {
int m = board.size();
if(m==0) return;
int n = board[0].size();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(i==0 || j==0 || i==m-1 || j==n-1) helper(board, i, j);
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(board[i][j]=='O') board[i][j]='X';
if(board[i][j]=='$') board[i][j]='O';
}
}
}
};
只有边缘的‘O’才不会变,所以只遍历边缘‘O’就行了~