130. Surrounded Regions
2016-03-15 13:02
288 查看
Given a 2D board containing
After running your function, the board should be:
Similar:286. Walls and Gates200. Number of Islands
'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 |
X | X | X | X |
X | X | X | X |
X | X | X | X |
X | O | X | X |
public class Solution {
public void solve(char[][] board) {
if (board.length == 0 || board[0].length == 0)
return;
int m = board.length;
int n = board[0].length;Queue<int[]> queue = new LinkedList<int[]>();
for (int i = 0; i < m; i++) {
if (board[i][0] == 'O') {
board[i][0] = 'H';
queue.offer(new int[] {i,0});
}
if (board[i][n-1] == 'O') {
board[i][n-1] = 'H';
queue.offer(new int[] {i,n-1});
}
}
for (int j = 1; j < n-1; j++) {
if (board[0][j] == 'O') {
board[0][j] = 'H';
queue.offer(new int[] {0,j});
}
if (board[m-1][j] == 'O') {
board[m-1][j] = 'H';
queue.offer(new int[] {m-1,j});
}
}int[] shift = {1, 0, -1, 0, 1};
while (!queue.isEmpty()) {
int[] pt = queue.poll();
for (int i=0; i<4; i++) {
int r = pt[0] + shift[i];
int c = pt[1] + shift[i+1];
if (r>=0 && r<m && c>=0 && c<n && board[r][c]=='O') {
board[r][c] = 'H';
queue.offer( new int[] {r,c});
}
}
}for (int i=0; i<m; i++)
for (int j=0; j<n ;j++) {
if (board[i][j] =='O') {
board[i][j] = 'X';
}
}
for (int i=0; i<m; i++)
for (int j=0; j<n; j++) {
if (board[i][j] == 'H') {
board[i][j] = 'O';
}
}
}
}
相关文章推荐
- MAC OSX 10.10 下启用自带的Apache的rewrite模块
- 新项目遇到的时间标签问题
- 树状数组-线段树
- .net创建和调用WebService
- Android与HTML+JS交互入门
- 2-SAT
- vc6转2010
- 数组初始化的三种方式
- 怎样用指针指向二维数组
- 字符串暴力
- python之pandas使用:数据的选择
- Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作
- 位运算(含应用)
- 培训日报3.14(mysql,guava,穿山甲等)
- 枚举
- (转)java classload 机制 详解
- JQuery中ajax的相关方法总结
- 位运算: 如何用移位运算实现乘法操作
- 智能社的邀请码
- 51NOD——1117 聪明的木匠(可用优先队列解决的贪心算法)