zoukankan      html  css  js  c++  java
  • 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);
                }
            }  
        }
    }
  • 相关阅读:
    20191119PHP.class类练习
    20191115PHP cookie登入实例
    Jenkins详细教程
    Navicat 破解
    测试_离职_交接内容
    ETL方法与过程讲
    ETL测试或数据仓库测试入门
    大数据基础了解-(基础01)
    adb调试显示adb: usage: unknown command device
    hive 创建/删除/截断 表(翻译自Hive wiki)
  • 原文地址:https://www.cnblogs.com/lc1475373861/p/12093533.html
Copyright © 2011-2022 走看看