130. 被围绕的区域

Posted 不吐西瓜籽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了130. 被围绕的区域相关的知识,希望对你有一定的参考价值。

算法记录

LeetCode 题目:

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



说明

一、题目

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

二、分析

  • 被完全围绕的会被同化为 X , 也就是在边缘区域的不会被同化.
  • 遍历四个边缘列, 然后再遍历其每个相连的元素即可.
class Solution {
    int[][] direction = {{1,0},{-1,0},{0,1},{0,-1}};
    public void dfs(char[][] board, int x, int y) {
        board[x][y] = '1';
        for(int i = 0; i < 4; i++) {
            int xk = x + direction[i][0];
            int yk = y + direction[i][1];
            if(xk < 0 || yk < 0 || xk >= board.length || yk >= board[0].length) continue;
            if(board[xk][yk] == 'O') dfs(board, xk, yk); 
        }
    }
    public void solve(char[][] board) {
        int m = board.length;
        int n = board[0].length;
        for(int i = 0; i < m; i++) {
            if(board[i][0] == 'O') dfs(board, i, 0);
            if(board[i][n - 1] == 'O') dfs(board, i, n - 1);
        }

        for(int i = 0; i < n; i++) {
            if(board[0][i] == 'O') dfs(board, 0, i);
            if(board[m  - 1][i] == 'O') dfs(board, m - 1, i);
        }

        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(board[i][j] == '1') board[i][j] = 'O';
                else board[i][j] = 'X';
            }
        }
    }
}

总结

熟悉深度优先搜索。

以上是关于130. 被围绕的区域的主要内容,如果未能解决你的问题,请参考以下文章

130被围绕的区域

LeetCode第130题—被围绕的区域—Python实现

130被围绕的区域

题目地址(130. 被围绕的区域)

LeetCode 130. 被围绕的区域

leetcode-130 被围绕的区域