Given a 2D board containing 'X'
and '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
public class Solution {
public void solve(char[][] board) {
// Start typing your Java solution below
// DO NOT write main() function
if(board.length < 1)
return;
//change 'O' to 'A'
//left -> right
for(int j = 0; j < board[0].length; j++)
flip(board, 0, j);
//up -> down
for(int i = 0; i < board.length; i++)
flip(board, i, board[0].length - 1);
//right -> left
for(int j = board[0].length - 1; j >= 0; j--)
flip(board, board.length - 1, j);
//down -> up
for(int i = board.length - 1; i >= 0; i--)
flip(board, i, 0);
//change 'O' to 'X'
for(int i = 0; i < board.length; i++)
for(int j = 0; j < board[0].length; j++)
if(board[i][j] == 'O')
board[i][j] = 'X';
//change 'A' to 'O'
for(int i = 0; i < board.length; i++)
for(int j = 0; j < board[0].length; j++)
if(board[i][j] == 'A')
board[i][j] = 'O';
}
public void flip(char[][] board, int i, int j){
if(i < 0 || i >= board.length || j < 0 || j >= board[0].length)
return;
if(board[i][j] == 'O'){
board[i][j] = 'A';
flip(board, i - 1, j);
flip(board, i + 1, j);
flip(board, i, j - 1);
flip(board, i, j + 1);
}
}
}