思路
题意是要将被字符’X’包围的‘O’改成‘X’,注意如果’O’在边界则永远不会被包围。这道题如果从边界开始思考问题解决起来会比较顺手,如果边界全是‘X’则里面的‘O’全部改变;如果边界出现一个’O’则顺着这个‘O’进行dfs,它所连接的‘O’全部不能被包围,则剩下的区域全部置于‘X’。
代码
class Solution {
private void dfs(int x,int y,char[][]board){
if(x<0||x>=board.length||y<0||y>=board[0].length) return ;
if(board[x][y]!='O') return;
board[x][y] = '#';
dfs(x-1,y,board);
dfs(x+1,y,board);
dfs(x,y-1,board);
dfs(x,y+1,board);
}
public void solve(char[][] board) {
if(board.length==0) return;
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
if(i==0||i==board.length-1||j==0||j==board[0].length-1){
if(board[i][j]=='O') dfs(i,j,board);
}
}
}
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
if(board[i][j]=='#') board[i][j] = 'O';
else board[i][j] = 'X';
}
}
}
}