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) {
- int rows = board.length;
- if(rows<=0) return;
- int cols = board[0].length;
- if(cols<=0) return;
- boolean flag[][] = new boolean[rows][cols];
- ArrayList<Integer> queue_x = new ArrayList<Integer>();
- ArrayList<Integer> queue_y = new ArrayList<Integer>();
- boolean OK = true;
- int[] dir_x = new int[]{-1,1,0,0};
- int[] dir_y = new int[]{0,0,-1,1};
- for(int i=0;i<rows;i++){
- for(int j=0;j<cols;j++){
- if(board[i][j]=='O'&&!flag[i][j]){
- int low = 0;
- int high = 1;
- OK = true;
- queue_x.add(i);
- queue_y.add(j);
- while(low<high){
- for(int k=0;k<4;k++){
- int x = queue_x.get(low)+dir_x[k];
- int y = queue_y.get(low)+dir_y[k];
- if(x>=0&&x<rows&&y>=0&&y<cols){
- if(!flag[x][y]&&board[x][y]=='O'){
- queue_x.add(x);
- queue_y.add(y);
- flag[x][y]=true;
- high++;
- }
- }else{
- OK = false;
- }
- }
- low++;
- }
- if(OK){
- for(int k=0;k<queue_x.size();k++){
- board[queue_x.get(k)][queue_y.get(k)] = 'X';
- }
- }
- queue_x.clear();queue_y.clear();
- }
- }
- }
- }
- }