0DFS/BFS中等 LeetCode130. 被围绕的区域 NC226 被围绕的区域

130. 被围绕的区域

描述

给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。

分析

从一点出发,把没有被包围的’O’变成’#’,递归遍历这个点周围的’O’,直到递归结束。这样最后把’#'变成’O’就行。
不明白,为什么DFS的效率高,BFS的效率低。

class Solution {
    
    
    public void solve(char[][] board) {
    
    
        for(int i = 0; i < board.length; i++){
    
    
            if(board[i][0] == 'O'){
    
    
                change(board,i,0);
            }
            if(board[i][board[0].length-1] == 'O'){
    
    
                change(board,i,board[0].length-1);
            }
        }
        for(int i = 0; i < board[0].length; i++){
    
    
            if(board[0][i] == 'O'){
    
    
                change(board,0,i);
            }
            if(board[board.length-1][i] == 'O'){
    
    
                change(board,board.length-1,i);
            }
        }
        for(int i = 0; i < board.length; i++){
    
    
            for(int j = 0; j < board[0].length; j++){
    
    
                board[i][j] = board[i][j] == '#' ? 'O' : 'X';
            }
        }
    }

    public void change(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] = '#';
        change(board,i,j+1);
        change(board,i,j-1);
        change(board,i+1,j);
        change(board,i-1,j);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43260719/article/details/121877118