跳到主要内容

130 被围绕的区域

https://leetcode.cn/leetbook/read/top-interview-questions-hard/xwfor1/

cost: 28m07s

class Solution {
public:
void solve(vector<vector<char>>& board) {
for (int i = 0; i < board.size(); i++) {
this->dfs(board, i, 0);
this->dfs(board, i, board[0].size() - 1);
}
for (int i = 0; i < board[0].size(); i++) {
this->dfs(board, 0, i);
this->dfs(board, board.size() - 1, i);
}
for (int i = 0; i < board.size(); i++) {
for (int j = 0; j < board[0].size(); j++) {
char& ch = board[i][j];
if (ch == '1') {
ch = 'O';
} else if (ch == 'O') {
ch = 'X';
}
}
}
}

private:
void dfs(vector<vector<char>>& board, int i, int j) {
if (i < 0 || j < 0 || i >= board.size() || j >= board[0].size() ||
board[i][j] != 'O') {
return;
}
board[i][j] = '1';
this->dfs(board, i - 1, j);
this->dfs(board, i + 1, j);
this->dfs(board, i, j - 1);
this->dfs(board, i, j + 1);
}
};