思路:根据“边界上的0不会被填充”,那么也就意味着边界上的0的附近(上下左右四个方向上)的0也不会被填充,因此可以做dfs递归,不断寻找边界0附近的0,也就是dfs的核心(不撞南墙不回头)。
package com.leetcode;
public class code130 {
public void solve(char[][] board) {
int m = board.length;
if(m==0)
return;
int n = board[0].length;
for (int i=0;i<m;i++){
for (int j=0;j<n;j++){
if(i==0||j==0||i==m-1||j==n-1){
dfs(board,i,j);
}
}
}
for (int i=0;i<m;i++){
for (int j=0;j<n;j++){
if(board[i][j]=='O')
board[i][j] = 'X';
if(board[i][j]=='#')
board[i][j] = 'O';
}
}
}
private void dfs(char[][] board, int i, int j) {
if(i<0||j<0||i>board.length-1||j>board[0].length-1||board[i][j]=='#'||board[i][j]=='X')
//终止条件:越界或已被标记过
return;
board[i][j]='#';
dfs(board,i-1,j);
dfs(board,i+1,j);
dfs(board,i,j-1);
dfs(board,i,j+1);
}
}