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) {
// Start typing your Java solution below
// DO NOT write main() function
if(board.length < 1)
return;
//change 'O' to 'A'
//left -> right
for(int j = 0; j < board[0].length; j++)
flip(board, 0, j);
//up -> down
for(int i = 0; i < board.length; i++)
flip(board, i, board[0].length - 1);
//right -> left
for(int j = board[0].length - 1; j >= 0; j--)
flip(board, board.length - 1, j);
//down -> up
for(int i = board.length - 1; i >= 0; i--)
flip(board, i, 0);
//change 'O' to 'X'
for(int i = 0; i < board.length; i++)
for(int j = 0; j < board[0].length; j++)
if(board[i][j] == 'O')
board[i][j] = 'X';
//change 'A' to 'O'
for(int i = 0; i < board.length; i++)
for(int j = 0; j < board[0].length; j++)
if(board[i][j] == 'A')
board[i][j] = 'O';
}
public void flip(char[][] board, int i, int j){
if(i < 0 || i >= board.length || j < 0 || j >= board[0].length)
return;
if(board[i][j] == 'O'){
board[i][j] = 'A';
flip(board, i - 1, j);
flip(board, i + 1, j);
flip(board, i, j - 1);
flip(board, i, j + 1);
}
}
}
本文介绍了一种解决二维棋盘中被'X'包围的'O'区域捕获问题的算法实现。通过递归地将边界上的'O'标记为临时字符,避免这些'O'被错误地转化为'X',最终将所有未被标记的'O'转化为'X',再将临时标记还原为'O'。
545

被折叠的 条评论
为什么被折叠?



