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);                     }     }
    };






















  • 相关阅读:
    x-www-form-urlencoded与multipart/form-data区别
    objc_msgSend method_getTypeEncoding 与 @encode
    历史文件备份,原文件已损失
    和安全有关的那些事(非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS及其他)
    HTTP权威指南 目录
    Makefile 与tab
    NSString+URLParser NSScanner
    (转)虚拟文件系统(VFS)浅析
    Linux套接字与虚拟文件系统(1):初始化和创建
    linux内核中的文件描述符(二)--socket和文件描述符
  • 原文地址:https://www.cnblogs.com/hrnn/p/13438213.html
Copyright © 2011-2022 走看看