描述
给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。
分析
从一点出发,把没有被包围的’O’变成’#’,递归遍历这个点周围的’O’,直到递归结束。这样最后把’#'变成’O’就行。
不明白,为什么DFS的效率高,BFS的效率低。
class Solution {
public void solve(char[][] board) {
for(int i = 0; i < board.length; i++){
if(board[i][0] == 'O'){
change(board,i,0);
}
if(board[i][board[0].length-1] == 'O'){
change(board,i,board[0].length-1);
}
}
for(int i = 0; i < board[0].length; i++){
if(board[0][i] == 'O'){
change(board,0,i);
}
if(board[board.length-1][i] == 'O'){
change(board,board.length-1,i);
}
}
for(int i = 0; i < board.length; i++){
for(int j = 0; j < board[0].length; j++){
board[i][j] = board[i][j] == '#' ? 'O' : 'X';
}
}
}
public void change(char[][] board, int i, int j){
if(i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] != 'O'){
return ;
}
board[i][j] = '#';
change(board,i,j+1);
change(board,i,j-1);
change(board,i+1,j);
change(board,i-1,j);
}
}