leetcode 130 被围绕的区域

简介: leetcode 130 被围绕的区域

被围绕的区域


a5767cafd0864e33b2a918fed04c7683.png

class Solution {
public:
    int m=0 , n=0;
    bool board_flag = false;
    int dir[4][2] = {0,-1,0,1,-1,0,1,0};
    void dfs(vector<vector<char>>& board ,  vector<vector<bool>> &path ,int x , int y ,bool exchange)
    {   
        for(int i=0 ; i<4 ;i++)
        {
            int next_x = x + dir[i][0];
            int next_y = y + dir[i][1];
            if(next_x<0 || next_x >= m || next_y<0||next_y>=n)
            {
                board_flag = true;
                continue;
            }
            if(exchange == false && board[next_x][next_y] == 'O' && path[next_x][next_y] == false)
            {
                path[next_x][next_y] = true;
                dfs(board,path,next_x,next_y,exchange);
            }
            if(exchange == true && board[next_x][next_y] == 'O')
            {
                board[next_x][next_y] = 'X';
                dfs(board,path,next_x,next_y,exchange);
            }
        }
    }
    void solve(vector<vector<char>>& board) {
        m = board.size();
        n = board[0].size();
        vector<vector<bool>> path(m,vector<bool>(n,false));
        for(int i=0 ; i<m ;i++)
        {
            for(int j=0 ; j<n ;j++)
            {
                if(board[i][j] == 'O' && path[i][j] == false)
                {
                    board_flag = false;
                    path[i][j] = true;
                    dfs(board,path,i,j,false);
                    if(board_flag == false)
                    {
                        board[i][j] = 'X';
                        dfs(board,path,i,j,true);
                    } 
                }
            }
        }
    }
};
相关文章
|
4月前
|
存储 算法 数据可视化
LeetCode 130题详解:深度优先搜索与广度优先搜索解决被围绕的区域
LeetCode 130题详解:深度优先搜索与广度优先搜索解决被围绕的区域
☆打卡算法☆LeetCode 130. 被围绕的区域 算法解析
“给定一个矩阵,矩阵由字符X和O组成,找出所有被X包围的区域,将区域内的所有O替换成X。”
|
算法
LeetCode刷题实战130:被围绕的区域
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
112 0
LeetCode刷题实战130:被围绕的区域
|
4天前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
44 6
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
38 4
|
2月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
82 2
|
4天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
2月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
38 7
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
20 4