给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。
找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。
示例:
X X X X
X O O X
X X O X
X O X X
运行你的函数后,矩阵变为:
X X X X
X X X X
X X X X
X O X X
public class Solution {
int n,m;
public void solve(char[][] board){
n=board.length;//行的长度
if (n==0){
return;
}
m=board[0].length;//列的长度
for (int i=0;i<n;i++){
dfs(board,i,0);//判断第0列及其相邻是否有'o'
dfs(board,i,m-1);//判断最后一列及其相邻是否有'o'
}
for (int i=1;i<m-1;i++){
dfs(board,0,i);//判断第0行及其相邻是否有'o'
dfs(board,n-1,i);//判断最后一行及其相邻是否有'o'
}
for (int i=0;i<n;i++){
for (int j=0;j<m;j++){
if (board[i][j]=='A'){
board[i][j]='O';
}else if(board[i][j]=='O'){
board[i][j]='X';
}
}
}
}
private void dfs(char[][] board,int x,int y) {
if (x<0||x>=n||y<0||y>=m||board[x][y]!='O'){
return;
}
board[x][y]='A';//是‘o’,标记为'A'
dfs(board,x+1,y);
dfs(board,x-1,y);
dfs(board,x,y+1);
dfs(board,x,y-1);
}
}