Description:
给一个二维的矩阵,包含 'X'
和 'O'
, 找到所有被 'X' 围绕的区域,并用 'X' 填充满。
Explanation:
给出二维矩阵:
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
X O X X
Solution:
从四周向中间检测‘O’是否合边缘连接,是则替换成*,检测之后遍历数组,O替换成X,*替换成O
public class Solution {
/**
* @param board a 2D board containing 'X' and 'O'
* @return void
*/
public void surroundedRegions(char[][] board) {
// Write your code here
if(board == null || board.length == 0 || board[0].length == 0){
return ;
}
int row = board.length;
int column = board[0].length;
for(int i = 0; i< row;i++){
if(board[i][0] == 'O'){
search(board , i ,0);
}
if(board[i][column - 1] == 'O'){
search(board , i , column - 1);
}
}
for(int i = 0;i<column;i++){
if(board[0][i] == 'O'){
search(board , 0 , i);
}
if(board[row - 1][i] == 'O'){
search(board , row - 1, i);
}
}
for(int i = 0;i<row;i++){
for(int j = 0;j<column;j++){
if(board[i][j] == 'O'){
board[i][j] = 'X';
}else if(board[i][j] == '*'){
board[i][j] = 'O';
}
}
}
}
public void search(char[][] board , int row , int column){
if(row < 0 || column < 0 || row >= board.length || column >= board[0].length){
return ;
}
if(board[row][column] != 'O'){
return ;
}
board[row][column] = '*';
search(board , row + 1, column);
search(board , row - 1, column);
search(board , row , column + 1);
search(board , row , column - 1);
}
}