• LeetCode 130. 被围绕的区域(Surrounded Regions)


    题目描述

    给定一个二维的矩阵,包含 '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'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

    解题思路

    分为两步:

    • 首先对矩阵四条边界上的所有'O'进行深度优先搜索,并将所有与边界相连区域的'O'填充为'#'
    • 然后遍历整个矩阵,将当前所有'O',即处在'X' 围绕的区域的'O'填充为'X',并将上一步填充的所有'#'还原为'O'

    代码

     1 class Solution {
     2 public:
     3     void solve(vector<vector<char>>& board) {
     4         if(board.empty() || board[0].empty()) return;
     5         int rows = board.size(), cols = board[0].size();
     6         for(int i = 0; i < cols; i++){
     7             if(board[0][i] == 'O') fillBorder(board, 0, i);
     8             if(board[rows - 1][i] == 'O') fillBorder(board, rows - 1, i);
     9         }
    10         for(int i = 0; i < rows; i++){
    11             if(board[i][0] == 'O') fillBorder(board, i, 0);
    12             if(board[i][cols - 1] == 'O') fillBorder(board, i, cols - 1);
    13         }
    14         for(int i = 0; i < rows; i++){
    15             for(int j = 0; j < cols; j++){
    16                 if(board[i][j] == 'O') board[i][j] = 'X';
    17                 if(board[i][j] == '#') board[i][j] = 'O';
    18             }
    19         }
    20     }
    21     void fillBorder(vector<vector<char>>& board, int row, int col){
    22         board[row][col] = '#';
    23         if(row - 1 >= 0 && board[row - 1][col] == 'O') fillBorder(board, row - 1, col);
    24         if(row + 1 < board.size() && board[row + 1][col] == 'O') fillBorder(board, row + 1, col);
    25         if(col - 1 >= 0 && board[row][col - 1] == 'O') fillBorder(board, row, col - 1);
    26         if(col + 1 < board[0].size() && board[row][col + 1] == 'O') fillBorder(board, row, col + 1);
    27     }
    28 };
  • 相关阅读:
    python基础总结一
    python解释器介绍与安装
    09 字符编码
    python 九九乘法表
    08 基本数据类型及内置方法
    07 Python语法入门之流程控制
    06 Python语法入门之与用户交互、运算符
    05 Python语法入门之垃圾回收机制
    04 Python语法入门之基本数据类型
    03 python语法入门之变量
  • 原文地址:https://www.cnblogs.com/wmx24/p/9455280.html
Copyright © 2020-2023  润新知