• 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'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/surrounded-regions

    解题思路:DFS+遍历实现,先使用DFS将数组边界上的 'O'转换成 'Y'

      然后在循环遍历整个二维数组,将数组中的所有‘O’转换成'X',将'Y'转换为'O'

    java实现:

    class Solution {
        public void solve(char[][] board) {
            if(board.length == 0 || board[0].length==0){
                return;
            }
            int row = board.length;
            int col = board[0].length;
            for(int i=0;i<row;i++){
                    dfsSearch(board,i,0); // 左边界
                    dfsSearch(board,i,col-1);  // 右边界
            }
            for(int j=0;j<col;j++){
                    dfsSearch(board,0,j);   // 上边界
                    dfsSearch(board,row-1,j); // 下边界
            }
            for(int i=0;i<row;i++){
                for(int j=0;j<col;j++){
                    if(board[i][j] == 'O'){
                        board[i][j] = 'X';
                    } else if(board[i][j] == 'Y'){
                        board[i][j] = 'O';
                    }
                }
            }
        }
    // 这里DFS要注意,越界情况
        public void dfsSearch(char[][] board, int row,int col){
            if(board[row][col] == 'O'){
                board[row][col] = 'Y';
                if(row > 1){
                    dfsSearch(board,row-1,col);
                }
                if(col > 1){
                    dfsSearch(board,row,col-1);
                }
                if(row < board.length - 1){
                    dfsSearch(board,row+1,col);
                }
                if(col < board[0].length - 1){
                     dfsSearch(board,row,col+1);
                }
            }  
        }
    }
  • 相关阅读:
    redis 笔记04 服务器、复制
    redis 笔记03 RDB 持久化、AOF持久化、事件、客户端
    redis 笔记02 对象、数据库
    反射复习笔记02
    攻防世界 — Web进阶题(第11
    机器学习-极大似然和对数几率回归(浅入)
    redis的过期策略和内存淘汰
    Backbone.Router实践
    Spring Boot 数据访问
    Archives: 2018/12
  • 原文地址:https://www.cnblogs.com/lc1475373861/p/12093533.html
Copyright © 2020-2023  润新知