美文网首页
被围绕的区域

被围绕的区域

作者: Haward_ | 来源:发表于2019-10-08 12:47 被阅读0次

题目:
给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。

找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。

示例:

X X X X
X O O X
X X O X
X O X X
运行你的函数后,矩阵变为:

X X X X
X X X X
X X X X
X O X X

思想:
利用上下左右的递归,蔓延做标记,求得结果。

class Solution {
    public void solve(char[][] board) {
        int m = board.length;
        if(m==0) {
            return;
        }
        int n = board[0].length;
        if(m==1 && n==1 && board[0][0]=='O') {
            return;
        }
        // 上
        for(int i=0;i<n-1;i++) {
            if(board[0][i]=='O') {
                fSolve(board,0,i);
            }
        }
        // 右
        for(int i=0;i<m-1;i++) {
            if(board[i][n-1]=='O') {
                fSolve(board,i,n-1);
            }
        }
        // 下
        for(int i=n-1;i>0;i--) {
            if(board[m-1][i]=='O') {
                fSolve(board,m-1,i);
            }
        }
        // 左
        for(int i=m-1;i>0;i--) {
            if(board[i][0]=='O') {
                fSolve(board,i,0);
            }
        }
        // 处理标记O的情况
        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                if(board[i][j]=='O') {
                    board[i][j] = 'X';
                }
            }
        }
        // 处理标记#的情况
        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                if(board[i][j]=='#') {
                    board[i][j] = 'O';
                }
            }
        }
    }
    
    private void fSolve(char[][] board, int indexI, int indexJ) {
        if(indexI<0 || indexI>board.length-1 || indexJ<0 || indexJ>board[0].length-1) {
            return;
        }
        if(board[indexI][indexJ]=='O') {
            board[indexI][indexJ]='#';
            fSolve(board,indexI-1,indexJ);
            fSolve(board,indexI+1,indexJ);
            fSolve(board,indexI,indexJ+1);
            fSolve(board,indexI,indexJ-1);
        }
    }
    
    
}

优化代码

class Solution {
    public void solve(char[][] board) {
        int m = board.length;
        if(m==0) {
            return;
        }
        int n = board[0].length;
        if(m==1 && n==1 && board[0][0]=='O') {
            return;
        }
        // 处理边界蔓延
        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                boolean isBorder = (i==0 || i==m-1 || j==0 || j==n-1);
                if(isBorder&&board[i][j]=='O') {
                    fSolve(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';
                }
                if(board[i][j]=='#') {
                    board[i][j] = 'O';
                }
            }
        }

    }
    
    private void fSolve(char[][] board, int indexI, int indexJ) {
        if(indexI<0 || indexI>board.length-1 || indexJ<0 || indexJ>board[0].length-1) {
            return;
        }
        if(board[indexI][indexJ]=='O') {
            board[indexI][indexJ]='#';
            fSolve(board,indexI-1,indexJ);
            fSolve(board,indexI+1,indexJ);
            fSolve(board,indexI,indexJ+1);
            fSolve(board,indexI,indexJ-1);
        }
    }
    
    
}

相关文章

  • 被围绕的区域

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

  • LeetCode-130-被围绕的区域

    LeetCode-130-被围绕的区域 130. 被围绕的区域[https://leetcode-cn.com/p...

  • 13 - Hard - 被围绕的区域

    给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 找到所有被 'X' 围绕的区域,并将这些区域里所有的 ...

  • 130. 被围绕的区域

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

  • 130. 被围绕的区域

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

  • 130. 被围绕的区域

    并查集。。针对这道题。。速度和性能并不高 然后dfs

  • Leetcode 130. 被围绕的区域

    时间:2019-08-11 题目描述 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 找到所有被 'X...

  • DFS——130. 被围绕的区域

    这道题的思路就是从上下和左右分为开始,利用DFS去找边上为O,并且连着的里面也是O的,里面的找到可以标记为Y,这样...

  • LeetCode No.14被围绕的区域

    1. LeetCode130题目链接链接 https://leetcode-cn.com/problems/sur...

  • LeetCode 130. 被围绕的区域

    题目链接 https://leetcode-cn.com/problems/surrounded-regions/...

网友评论

      本文标题:被围绕的区域

      本文链接:https://www.haomeiwen.com/subject/yalbpctx.html