2.此题采用了正难则反的思路,直接将靠边的情况单独处理,直接省去了大量的判断代码
class Solution {
public:
int m;
int n;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void dfs(vector<vector<char>>&board,int i,int j)
{
board[i][j]='.';
for(int k=0;k<4;k++)
{
int x=dx[k]+i;
int y=dy[k]+j;
if(x>=0&&x<m&&y>=0&&y<n&&board[x][y]=='O')
{
dfs(board,x,y);
}
}
}
void solve(vector<vector<char>>& board) {
m=board.size();
n=board[0].size();
for(int i=0;i<m;i++)
{
if(board[i][0]=='O')
{
dfs(board,i,0);
}
if(board[i][n-1]=='O')
{
dfs(board,i,n-1);
}
}
for(int j=0;j<n;j++)
{
if(board[0][j]=='O')
{
dfs(board,0,j);
}
if(board[m-1][j]=='O')
{
dfs(board,m-1,j);
}
}
for(int x=0;x<m;x++)
{
for(int y=0;y<n;y++)
{
if(board[x][y]=='O')
{
board[x][y]='X';
}
else if(board[x][y]=='.')
{
board[x][y]='O';
}
}
}
}
};