zoukankan      html  css  js  c++  java
  • leetcode21 surrounded regions

    题目描述

    现在有一个仅包含‘X’和‘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

    Given a 2D board containing'X'and'O', capture all regions surrounded by'X'.

    A region is captured by flipping all'O's into'X's in that surrounded region .

    For example,

    X X X X↵X O O X↵X X O X↵X O X X↵


    After running your function, the board should be:

    X X X X↵X X X X↵X X X X↵X O X X
    class Solution {
    public:
        void solve(vector<vector<char>> &board) {
            if(board.empty())
                return;
            int rows = board.size();
            int cols = board[0].size();
             
            if(rows==0 || cols==0)
                return;
             
            for(int j=0;j<cols;j++)
            {
                DFS(board, 0, j);
                DFS(board, rows-1, j);         }                  for(int i=0;i<rows;i++)         {             DFS(board, i, 0);             DFS(board, i, cols-1);         }                  for(int i=0;i<rows;i++)             for(int j=0;j<cols;j++)                 if(board[i][j] == 'O')                     board[i][j] = 'X';                  for(int i=0;i<rows;i++)             for(int j=0;j<cols;j++)                 if(board[i][j] == '*')                     board[i][j] = 'O';
        }
        void DFS(vector<vector<char> > &board, int r, int c)
        {
            if(board[r][c] == 'O')
            {
                board[r][c] = '*';             int rows = board.size();             int cols = board[0].size();                          if(r > 1)                 DFS(board, r-1, c);             if(r < rows-2)                 DFS(board, r+1, c);             if(c > 1)                 DFS(board, r, c-1);             if(c < cols-2)                 DFS(board, r, c+1);                     }     }
    };






















  • 相关阅读:
    PAIP HTML的调试与分析工具
    paip.输入法编程一级汉字1000个
    paip.DEVSUIT ADMIN 初次使用时出现两个LICENSE提醒
    int main(int argc,char *argv[])中参数的意义
    深入理解C语言小记
    曲线拟合的最小二乘法
    C51 bit和sbit的区别
    曲线拟合的最小二乘法
    有关verilog truncated value with size 32 to match size of target警告的处理
    C51 bit和sbit的区别
  • 原文地址:https://www.cnblogs.com/hrnn/p/13438213.html
Copyright © 2011-2022 走看看