leetcode--Surrounded Regions

来源:互联网 发布:邮箱服务器软件 编辑:程序博客网 时间:2024/06/07 04:53

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 XX O O XX X O XX O X X

After running your function, the board should be:

X X X XX X X XX X X XX 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();}}}    }}

0 0