zoukankan      html  css  js  c++  java
  • 130. 被围绕的区域

    题目

    leetcode_被围绕的区域
    给定一个二维的矩阵,包含 '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

    解释:

    被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

    解题思路:

    1.只需要看哪些O和边界上的O连接的即可,剩下的O都要变成X。
    2.对边界上的O进行DFS,把和边界相连的O变成-
    3.遍历矩形,把O换成X,把-换成O即可

    代码

    class Solution {
        public void solve(char[][] board) {
            if(board.length==0||board[0].length==0)
                return;
            int r=board.length;
            int c=board[0].length;
    
            //遍历边界(左右边界)
            for(int i=0;i<r;i++){
                dfs(board,i,0);
                dfs(board,i,c-1);
            }
            //遍历边界 (上下边界)
            for(int i=0;i<c;i++){
                dfs(board,0,i);
                dfs(board,r-1,i);
            }
            //替换
            for(int i=0;i<r;i++)
                for(int j=0;j<c;j++){
                    if(board[i][j]=='O'){
                        board[i][j]='X';
                    }else if(board[i][j]=='-'){
                        board[i][j]='O';
                    }
                }
        }
    
        //边界字符'O' DFS遍历并替换为'-'
        public void dfs(char[][] board,int x,int y){
            if(x<0||x>=board.length||y<0||y>=board[0].length||board[x][y]!='O')
                return;
            board[x][y]='-';
            dfs(board,x+1,y);
            dfs(board,x-1,y);
            dfs(board,x,y+1);
            dfs(board,x,y-1);
        }
    }
    
  • 相关阅读:
    第02组 每周小结 (2/3)(组长)
    第02组 每周小结 (1/3)(组长)
    第02组(51)beta冲刺总结
    第02组 Beta冲刺 (5/5)(组长)
    第02组 Beta冲刺 (4/5)(组长)
    第02组 Beta冲刺 (3/5)(组长)
    第02组 Beta冲刺 (2/5)(组长)
    第02组 Beta冲刺 (1/5)(组长)
    软工实践个人总结
    第11组 每周小结 (当前轮次3/3)
  • 原文地址:https://www.cnblogs.com/bendandedaima/p/13522081.html
Copyright © 2011-2022 走看看