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

来源:力扣(LeetCode)


嗯,这个题,咋说呢。经过我的不懈努力,终于发现用循环我是做不出来的。
开始用递归写,想法就是从(0,0)开始递归,但最终边界O与其他O分不出来。然后转战循环。。。。。
看了下题解,主要是从边界开始递归把边界的O与他相连的变为特殊字符以此区分。
最后再把他们转换过来。

 int x[4]={0,0,1,-1};int y[4]={1,-1,0,0};void solve(vector<vector<char>>& board) {if(board.size()<=2) return;for(int i=0;i<board.size();i++){//行dfs(board,i,0);dfs(board,i,board[0].size()-1);}for(int j=1;j<board[0].size()-1;j++){dfs(board,0,j);dfs(board,board.size()-1,j);}for(int i=0;i<board.size();i++){for(int j=0;j<board[0].size();j++){if(board[i][j]=='*') board[i][j]='O';else if(board[i][j]=='O') board[i][j]='X';}}}void dfs(vector<vector<char>>& board,int px,int py){if(px<0||py<0||px>=board.size()||py>=board[0].size()||board[px][py]!='O') return;board[px][py]='*';for(int i=0;i<4;i++) dfs(board,px+x[i],py+y[i]);}

130.被围绕的区域相关推荐

  1. 130. 被围绕的区域

    链接:130. 被围绕的区域 题解:深度优先搜索 class Solution { public:vector<vector<int>> direction{{1, 0},{- ...

  2. 10.13(129. 求根到叶子节点数字之和 130. 被围绕的区域)

    129. 求根到叶子节点数字之和(通过) 思路:递归,前序遍历的应用 效率:100% 程序代码: /*** Definition for a binary tree node.* struct Tre ...

  3. Leetcode-搜索-130.被围绕的区域(中等)

    130. 被围绕的区域 题目如下 解题思路 dfs-c++代码(深搜) bfs-c++代码(广搜) 提交对比 题目如下 解题思路 不被包围的肯定有一边在边界,所以我们从边界遍历,边界遍历可以碰到的0是 ...

  4. 【LeetCode】130.被围绕的区域

    一.题目描述 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充. 二.示例 示例: X X X X X O O ...

  5. LeetCode 130. 被围绕的区域(图的BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' ...

  6. LeetCode 130 被围绕的区域

    题目描述 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O).找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充. 题解 没有被'X'包围的区域一定在边上,可以从四周 ...

  7. 【广度优先搜索-中等】130. 被围绕的区域

    [题目] [代码] [方法1] 对矩阵的四条边进行遍历,对于边上"O"的点深度优先搜索,将预期相连的所有"O"点全部在原存储空间上标记为"A" ...

  8. Leetcode 130. 被围绕的区域 解题思路及C++实现

    解题思路: 这是一个典型的深度优先搜索问题,在程序处理过程中,将未被'X'包围的'O'标记为符号'*'. 先遍历数组边界上的字符'O',将其标记为'*',然后对出现'*'的位置,通过递归dfs,遍历其 ...

  9. Leetcode 130. 被围绕的区域 (每日一题 20210720 同类型题)

    'O' 相连的 'O' 最终都会被填充为 'X'.如果两个元素在水平或垂直方向相邻,则称它们是"相连"的. 示例 2:输入:board = [["X"]] 输出 ...

最新文章

  1. datalist可以放div吗?_炒花生米可以放蜂蜜吗?蜂蜜花生米的正确做法窍门
  2. python3 socketserver_Python3中的SocketServer
  3. mysql blob 字段_MySQL中TEXT与BLOB字段类型的区别
  4. JeePlus左树右表之 表单【右表】自动获取列表【左树 】中的id
  5. android 按钮顶级效果_Android 源码之button高亮效果
  6. 散列表删除一个元素c语言,分享一个简单高效的哈希表C语言实现
  7. 《Unix网络编程(第3版)》代码编译的一些问题
  8. PyQt5系列(二)Mac下使用py2app打包python项目
  9. 文献按时间排序_论文参考文献详解~
  10. 【学习资料分享】光纤KVM坐席管理系统解决方案
  11. WebRTC之beamforming算法
  12. excel冻结窗口_冻结窗口怎么冻结多行
  13. Win7旗舰版 安装步骤
  14. 小白的倔强-NPN和PNP三极管的使用区别以及简单检测
  15. r语言查找是否存在空值_R语言读取数据空值
  16. 关于dd命令的使用以及详解
  17. 类似Confluence的软件有哪些
  18. React —— Descriptions(根据自己需求判断要显示哪些)
  19. 双非小伙暑期实习斩获腾讯WXG offer,这不比博人传燃?
  20. 计算机访问控制机制,访问控制策略和机制-信息安全工程师知识点

热门文章

  1. 【OpenCV 4开发详解】多通道分离与合并
  2. 链表问题14——在单链表种删除指定值的节点(方法二)
  3. 架构师升级之路,你掌握了吗?
  4. SAX解析XML文档——(二)
  5. 计算机程序的思维逻辑 (43) - 剖析TreeMap
  6. [LeetCode]题解(python):019-Remove Nth Node From End of List
  7. 【OpenGL】关于OpenGL中Bind函数的理解
  8. iOS 5与iOS 6的 low-memory 处理(转自cocoaChina)
  9. ASP编程学习的28个观点
  10. 为循环的repeater的第一行加个样式