130.被围绕的区域

130.被围绕的区域

image-20200811230401338

image-20200811230435401

题解

​ 从边界处的O出发,把所有与边界O相连的O都标记为A,方便后续将所有剩余的O替换成X,所有的A替换成O。

class Solution {
    
    
    int n, m;

    public void solve(char[][] board) {
    
    
        n = board.length;
        if (n == 0) {
    
    
            return;
        }
        m = board[0].length;
        for (int i = 0; i < n; i++) {
    
    
            dfs(board, i, 0);
            dfs(board, i, m - 1);
        }
        for (int i = 1; i < m - 1; i++) {
    
    
            dfs(board, 0, i);
            dfs(board, n - 1, i);
        }
        for (int i = 0; i < n; i++) {
    
    
            for (int j = 0; j < m; j++) {
    
    
                if (board[i][j] == 'A') {
    
    
                    board[i][j] = 'O';
                } else if (board[i][j] == 'O') {
    
    
                    board[i][j] = 'X';
                }
            }
        }
    }

    public void dfs(char[][] board, int x, int y) {
    
    
        if (x < 0 || x >= n || y < 0 || y >= m || board[x][y] != 'O') {
    
    
            return;
        }
        board[x][y] = 'A';
        dfs(board, x + 1, y);
        dfs(board, x - 1, y);
        dfs(board, x, y + 1);
        dfs(board, x, y - 1);
    }
}

猜你喜欢

转载自blog.csdn.net/Rush6666/article/details/107946820