标签:
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
解题思路:
对最外面一圈进行BFS,替换掉最外圈的连通范围,剩下的‘O’都是被包围的,就可以直接kill掉,JAVA实现如下:
static public void solve(char[][] board) {
if (board.length <= 2 || board[0].length <= 2)
return;
for (int row = 0; row < board.length; row++) {
if (board[row][0] == ‘O‘) {
board[row][0] = ‘T‘;
bfs(board, row * board[0].length);
}
if (board[row][board[0].length - 1] == ‘O‘) {
board[row][board[0].length - 1] = ‘T‘;
bfs(board, row * board[0].length + board[0].length - 1);
}
}
for (int col = 1; col < board[0].length - 1; col++) {
if (board[0][col] == ‘O‘) {
board[0][col] = ‘T‘;
bfs(board, col);
}
if (board[board.length - 1][col] == ‘O‘) {
board[board.length - 1][col] = ‘T‘;
bfs(board, (board.length - 1) * board[0].length + col);
}
}
for (int row = 0; row < board.length; row++)
for (int col = 0; col < board[0].length; col++) {
if (board[row][col] == ‘T‘)
board[row][col] = ‘O‘;
else if (board[row][col] == ‘O‘)
board[row][col] = ‘X‘;
}
}
static public void bfs(char[][] board, int num) {
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(num);
while (!queue.isEmpty()) {
num=queue.poll();
int row = num / board[0].length;
int col = num - row * board[0].length;
if (row - 1 >= 0 && board[row - 1][col] == ‘O‘) {
board[row - 1][col] = ‘T‘;
queue.add(num - board[0].length);
}
if (row + 1 <= board.length - 1 && board[row + 1][col] == ‘O‘) {
board[row + 1][col] = ‘T‘;
queue.add(num + board[0].length);
}
if (col - 1 >= 0 && board[row][col - 1] == ‘O‘) {
board[row][col - 1] = ‘T‘;
queue.add(num - 1);
}
if (col + 1 <= board[0].length - 1 && board[row][col + 1] == ‘O‘) {
board[row][col + 1] = ‘T‘;
queue.add(num + 1);
}
}
}
Java for LeetCode 130 Surrounded Regions
标签:
原文地址:http://www.cnblogs.com/tonyluis/p/4544441.html