class Solution {
public int[][] direction={{-1,0},{0,1},{1,0},{0,-1}};
public void solve(char[][] board) {
if(board==null||board.length==0||board[0].length==0){
return;
}
for(int i=0;i<board.length;i++){
dfs(board,i,0);
dfs(board,i,board[0].length-1);
}
for(int j=0;j<board[0].length;j++){
dfs(board,0,j);
dfs(board,board.length-1,j);
}
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
if(board[i][j]=='T'){
board[i][j]='O';
}else{
board[i][j]='X';
}
}
}
}
public void dfs(char[][] board,int r,int c){
if(r<0||r>=board.length||c<0||c>=board[0].length||board[r][c]!='O'){
return;
}
board[r][c]='T';
for(int[] d:direction){
dfs(board,r+d[0],c+d[1]);
}
}
}
我们的目标是找到所有与某一个在边界的’O’相连的‘O’,全部改为T ,可以用dfs或者bfs来做(以矩阵最外层的框上的每个点为起点进行DFS)。
没有变为T的O,就是被X包围的O。
遍历时将T还原为O,将被X包围的O改为X。