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

DFS

所有的不被包围的 O 都直接或间接与边界上的 O 相连。

  • 对于每一个边界上的 O,我们以它为起点,标记所有与它直接或间接相连的字母 O
  • 最后我们遍历这个矩阵,对于每一个字母:
    • 如果该字母被标记过,则该字母为没有被字母 X 包围的字母 O,我们将其还原为字母 O
    • 如果该字母没有被标记过,则该字母为被字母 X 包围的字母 O,我们将其修改为字母 X

Code

 def solve(self, board: List[List[str]]) -> None:"""Do not return anything, modify board in-place instead."""if not board:returndef dfs(x, y):if not 0 <= x < rows or not 0 <= y < cols or board[x][y] != 'O':returnboard[x][y] = 'V'dfs(x + 1, y)dfs(x - 1, y)dfs(x, y + 1)dfs(x, y - 1)rows, cols = len(board), len(board[0])for r in range(rows):dfs(r, 0)dfs(r, cols - 1)for c in range(1, cols - 1):dfs(0, c)dfs(rows - 1, c)for r in range(rows):for c in range(cols):if board[r][c] == 'V':board[r][c] = 'O'elif board[r][c] == 'O':board[r][c] = 'X'

复杂度分析

  • 时间复杂度:O(n×m)O(n \times m)O(n×m),其中 nnn 和 mmm 分别为矩阵的行数和列数。深度优先搜索过程中,每一个点至多只会被标记一次。

  • 空间复杂度:O(n×m)O(n \times m)O(n×m),其中 nnn 和 mmm 分别为矩阵的行数和列数。主要为深度优先搜索的栈的开销。

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

  1. 【BFS】LeetCode 130. Surrounded Regions

    LeetCode 130. Surrounded Regions Solution1:我的答案 利用bfs解决,超过98.7%的答案,还不错.关键是简单易懂! class Solution { pub ...

  2. leetcode 130. Surrounded Regions | 130. 被围绕的区域(DFS递归“感染“思路)

    题目 https://leetcode.com/problems/surrounded-regions/ 题解 Related Topics 说是并查集问题,然而我并没有用到. 带有 visited ...

  3. [LeetCode] 130. Surrounded Regions Java

    题目:Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A ...

  4. leetcode @python 130. Surrounded Regions

    题目链接 https://leetcode.com/problems/surrounded-regions/ 题目原文 Given a 2D board containing 'X' and 'O', ...

  5. 130 Surrounded Regions

    题目链接:https://leetcode.com/problems/surrounded-regions/ 题目: Given a 2D board containing 'X' and 'O', ...

  6. 利用BFS和DFS解决 LeetCode 130: Surrounded Regions

    问题来源 此题来源于LEETCODE,具体问题详见下面的链接 https://leetcode.com/problems/surrounded-regions/description/ 问题简述 给定 ...

  7. [Leetcode][第130题][JAVA][被围绕的区域][DFS][BFS]

    [问题描述][中等] [解答思路] 1. 深度优先搜索 使用深度优先搜索实现标记操作.在下面的代码中,我们把标记过的字母 O 修改为字母 A. 复杂度 class Solution {int[] dx ...

  8. 130. Surrounded Regions

    题目描述 解题思路==先将不要变的O换为1,再将其余的O变成X,最后再将1变回为O 代码如下 class Solution{ public:void solve(vector<vector< ...

  9. 130. 被围绕的区域

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

最新文章

  1. 打包tomcat没有xml文件_Spring Boot 项目打包 War 并部署到 Tomcat
  2. python实现二分查找(折半查找)算法
  3. centos改动sshport
  4. xampp打开mysql的admin访问被拒绝_U盘插入电脑提示无法访问?别怕,我找到解决办法了...
  5. wsl2设置挂载_Windows下的Linux子系统安装,WSL 2下配置docker
  6. Android还在用Toast?你Out啦,该试试Snackbar了
  7. .NET Core全新路线图
  8. 【python简洁之道】-----1. 注释规则
  9. 五笔输入法的前世今生
  10. PMP知识点总结-自由时差与总时差
  11. 0CTF/TCTF2019 Ghost Pepper Writeup
  12. 机器学习中的过拟合与欠拟合
  13. python手机端如何下载_过去,哔哩哔哩上面的视频只能在手机上面下载;现在,我用Python爬虫实现了能在PC端上面下载...
  14. JAVA获取上一年的日期_java获取日期,前一年,前一月,前一周
  15. 严重: Allocate exception for servlet CustomerServlet java.lang.ClassNotFoundException: cn.itcast.cstm.
  16. Android 性能优化概述
  17. 关于Python的静态变量
  18. hive问题-return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  19. 微博登入php,ThinkPHP接入微博登录
  20. 【社会调研】访谈个案案例分享

热门文章

  1. mybatis报错invalid types () or values ()解决方法
  2. zmq中zmq_poll()函数介绍
  3. python怎么让游戏倒计时_Python如何让倒计时效果的在固定区域刷新
  4. C语言学习之输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
  5. linux 指令tftp传输文件_tftp命令_Linux tftp 命令用法详解:在本机和tftp服务器之间使用TFTP协议传输文件...
  6. 索尔维会议记录软件测试,索尔维会议
  7. 课堂派派典型用户和场景
  8. 根据树的两种遍历序列求第三种遍历序列
  9. idea 新建一个spring项目
  10. white-space详解