leetcode--Surrounded Regions

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值