思路
很明显,只有与边界上的O连接的O才不会X覆盖
解题方法
检测边界上的字符,如果是O则向周围探测,访问与之连接的不会被覆盖的X。边界探测结束后,没有访问过的O皆会被X覆盖
Code
java
class Solution {
public int dir[][]={{0,1},{0,-1},{1,0},{-1,0}};
public boolean vis[][];
public char[][] map;
public int m;
public int n;
public void solve(char[][] board) {
m=board.length;
n=board[0].length;
map=board;
vis=new boolean[m][n];
for(int i=0;i<m;i++){
dfs(i,0);
dfs(i,n-1);
}
for(int i=1;i<n-1;i++){
dfs(0,i);
dfs(m-1,i);
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
board[i][j]='X';
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(map[i][j]=='X'&&vis[i][j]){
board[i][j]='O';
}
}
}
}
void dfs(int x,int y){
if(map[x][y]=='X') return;
vis[x][y]=true;
for(int i=0;i<4;i++){
int newx=x+dir[i][0];
int newy=y+dir[i][1];
if(0<=newx&&newx<m&&0<=newy&&newy<n&&map[newx][newy]=='O'&&
!vis[newx][newy]){
dfs(newx,newy);
}
}
}
}