题目链接:https://leetcode.com/problems/surrounded-regions/
Given a 2D board containing 'X'
and 'O'
(the letter O), capture all regions surrounded by 'X'
.
A region is captured by flipping all 'O'
s into 'X'
s in that surrounded region.
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
思路:
先沿着矩阵的四条边界来广度搜索哪个o是不被同化的,标记一下,后续根据这个标记处理即可。
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;
for(int i=0;i<m;i++){
if(board[i][0]=='O')
markToN(board,i,0);
if(board[i][n-1]=='O')
markToN(board,i,n-1);
}
for(int j=0;j<n;j++){
if(board[0][j]=='O')
markToN(board,0,j);
if(board[m-1][j]=='O')
markToN(board,m-1,j);
}
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
if(board[i][j]=='O')
board[i][j]='X';
if(board[i][j]=='N')
board[i][j]='O';
}
}
public void markToN(char[][] board,int i,int j){
if(i<0||i>=board.length||j<0||j>=board[0].length||board[i][j]!='O')
return;
board[i][j]='N';
markToN(board,i+1,j);
markToN(board,i-1,j);
markToN(board,i,j+1);
markToN(board,i,j-1);
}
}