java刷题--130被围绕的区域

Posted Anrys

tags:

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

java刷题--130被围绕的区域

题目

代码

class Solution {
    public void solve(char[][] board) {
        if (board == null || board.length == 0) return;
        int m = board.length;
        int n = board[0].length;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                boolean isEdge = (i == 0 || j == 0 || i == m - 1 || j == n - 1); //从边界开始
                //如果是在边界并且等于0则开始dfs,因为边界上不可能被围绕,从边界开始延伸所有的0都变为#
                if (isEdge && board[i][j] == 'O') infect(board, i, j); 
            }
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (board[i][j] == 'O') { board[i][j] = 'X';  } //将区域的o用x填充;
                if (board[i][j] == '#') { board[i][j] = 'O';  } //将o填充#          
            }
        }
    }
    public void infect(char[][] board, int i, int j) {
        if (i < 0 || j < 0 || i >= board.length  || j >= board[0].length || board[i][j] == 'X' || board[i][j] == '#') {
            // board[i][j] == '#' 说明已经搜索过了. 
            return;
        }
        board[i][j] = '#';
        infect(board, i - 1, j); // 上
        infect(board, i + 1, j); // 下
        infect(board, i, j - 1); // 左
        infect(board, i, j + 1); // 右
    }
}

结果

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

[JavaScript 刷题] 搜索 - 被围绕的区域,leetcode 130

130被围绕的区域

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

130被围绕的区域

LeetCode刷题模版:121 - 130

LeetCode刷题模版:121 - 130