思路:
先遍历整个四个边,如果边上有‘O’,那就沿着‘O’一直遍历,把所有的‘O’都变成‘#’,遍历完成四条边后,然后遍历真个图,遇到‘O’就赋值‘X’,遇到‘#’还原成‘O’
void helper(vector<vector<char>> &board,int i,int j) //检查边界是否有‘O’,有的话置为‘#’,沿着‘O’一直检查
{
if(board[i][j]=='O')
{
board[i][j]='#';
if(i>1)
helper(board,i-1,j);//左边
if(j>1)
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)
{
if(board.empty())
return ;
int row = board.size(),col = board[0].size();//
for(int i=0;i<row;i++)//
{
helper(board,i,0);//检测第一列
helper(board,i,col-1);//检测最后一列
}
for(int j=1;j<col-1;j++)
{
helper(board,0,j);//检测第一行
helper(board,row-1,j);//检测最后一行
}
for(int i=0;i<row;i++)//把里面的‘O’替换成‘X’,把‘#’还原成‘O’
{
for(int j=0;j<col;j++)
{
if(board[i][j]=='O')
board[i][j]='X';
else if(board[i][j]=='#')
board[i][j]='O';
}
}
}