Leetcode130: 被包围的区域

2020-05-06  本文已影响0人  VIELAMI

【题目描述】
给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。
找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充


image.png

【思路】
找到不在边界上的O -> 找到在边界上的O并标记 之后剩下的就是被包围的O 进行变换和还原

void solve(vector<vector<char>>& board) {
    //Leetcode130:被围绕的区域
    int m = board.size();
    int n = board[0].size();
        // 在四条边上搜索,搜索到就进行DFS
    if (m <= 2 || n <= 2) {
        return;
    }
    for (int i = 0; i < board.size(); i++) {
        if (board[i][0] == 'O') dfs(board, i, 0);
        if (board[i][n - 1] == 'O') dfs(board, i, n - 1);
    }
    for (int j = 0; j < n; j++) {
        if (board[0][j] == 'O') dfs(board, 0, j);
        if (board[m - 1][j] == 'O') dfs(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';
            }
            else if (board[i][j] == 'M') {
                board[i][j] = 'O';
            }
        }

    }
}
void dfs(vector<vector<char>>& board,int i,int j) {
    if ((i >= 0) && (j >= 0) && (i < board.size()) && (j < board[0].size())) { //判断i,j没有超出范围
        if (board[i][j] == 'O') {
            board[i][j] = 'M';
            dfs(board, i + 1, j);
            dfs(board, i - 1, j);
            dfs(board, i, j + 1);
            dfs(board, i, j - 1);
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读