Given a 2D board containing 'X'
and 'O'
(the letter O),
capture all regions surrounded by 'X'
.
A region is captured by flipping all 'O'
s into 'X'
s
in that surrounded region.
For example,
X X X X X O O X X X O X X O X X
After running your function, the board should be:
X X X X X X X X X X X X X O X X
dfs:
public class Solution {
private int m;
private int n;
public void solve(char[][] board) {
n=board.length;
if(n==0) return;
m=board[0].length;
for(int i=0;i<n;i++){
if(board[i][0]=='O') dfs(board,i,0);
if(board[i][m-1]=='O') dfs(board,i,m-1);
}
for(int j=0;j<m;j++){
if(board[0][j]=='O') dfs(board,0,j);
if(board[n-1][j]=='O') dfs(board,n-1,j);
}
for(int i=0;i<n;i++){
for(int j=0;j<m;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>n-1||j>m-1) return;
if(board[i][j]=='O')
board[i][j]='*';
if(i>1 &&board[i-1][j]=='O') dfs(board,i-1,j);
if(i<n-2&&board[i+1][j]=='O') dfs(board,i+1,j);
if(j>1&&board[i][j-1]=='O') dfs(board,i,j-1);
if(j<m-2&&board[i][j+1]=='O') dfs(board,i,j+1);
}
}