其他分享
首页 > 其他分享> > 130. 被围绕的区域

130. 被围绕的区域

作者:互联网

给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。

示例 1:
在这里插入图片描述

输入:board = [[“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’。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。
示例 2:

输入:board = [[“X”]]
输出:[[“X”]]

class Solution {
public:
    int row = 0;
    int col = 0;
    void area(vector<vector<char>>& board,int i,int j){
        if(!isboard(i,j)||board[i][j]!='O') return ; 
        board[i][j] = '#';
        //左,下,右,上
        area(board,i-1,j);
        area(board,i,j+1);
        area(board,i+1,j);
        area(board,i,j-1);
    }
    bool isboard(int i,int j){
        if(i>=0&&i<row&&j>=0&&j<col) 
            return true;
        return false;
    }
    void solve(vector<vector<char>>& board) {
        row = board.size();
        if(!row) return ;
        col = board[0].size();
        for(int i = 0;i<row;i++)
           for(int j = 0;j<col;j++){
              //先遍历边缘
              if(i==0||j==0||i==row-1||j==col-1){
                  if(board[i][j]=='O')
                    area(board,i,j);
              }
          }
        for(int i = 0;i<row;i++)
           for(int j = 0;j<col;j++){
                if(board[i][j]=='O')
                   board[i][j] ='X';
                if(board[i][j]=='#')
                   board[i][j] = 'O';
           }
    }
    
};

标签:边界,area,int,区域,围绕,130,board,col,row
来源: https://blog.csdn.net/qq_43885462/article/details/114944998