Given an m x n matrix board containing 'X' and 'O', capture all regions that are 4-directionally surrounded by 'X'.
A region is captured by flipping all 'O's into 'X's in that surrounded region.
class Solution {
public void solve(char[][] board) {
int m = board.length;
int n = board[0].length;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n ;j++) {
if (i == 0 || i == m -1 || j == 0 || j == n - 1) {
if (board[i][j] == 'O') {
dfs(board,i,j);//从四边传染,没传染上的都会变“X”
}
}
}
}
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] == '1') {
board[i][j] = 'O';
}
}
}
}
private void dfs(char[][] board, int i, int j) {
if (i < 0 || i >= board.length || j < 0 || j>= board[0].length) {
return;
}
if (board[i][j] != 'O') {
return;
}
board[i][j] = '1';
dfs(board,i + 1,j);
dfs(board,i - 1,j);
dfs(board,i,j + 1);
dfs(board,i,j - 1);
}
}