题目

https://leetcode.com/problems/surrounded-regions/

题解

Related Topics 说是并查集问题,然而我并没有用到。
带有 visited 数组的 DFS 时间复杂度应该是 O(M*N),因为每个坐标只被 visit 过 2 遍。

有点像围棋,只要我是活的,那么我能伸展到的位置就都是活的。
最初始的时候,有哪些是活的呢?那就是所有边沿上的 O。让它们去 DFS 做伸展,所以这是一个感染的过程。

或者可以这样想,只有能和上下左右边缘 接壤 的 ‘O’ 能够存活,所以不用去管中间的 O,只要让活着的 O,去感染相邻上下左右的 O,被感染的 O 就能存活,最后没有被感染的 O 就会挂掉,变成 X。

class Solution {int M, N;public void solve(char[][] board) {M = board.length;N = board[0].length;// 从4个边缘向内部"感染"boolean[][] visited = new boolean[M][N];boolean[][] alive = new boolean[M][N];for (int i = 0; i < M; i++) {dfs(board, i, 0, alive, visited);dfs(board, i, N - 1, alive, visited);}for (int j = 0; j < N; j++) {dfs(board, 0, j, alive, visited);dfs(board, M - 1, j, alive, visited);}// build return matrixfor (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (!alive[i][j]) board[i][j] = 'X';}}}public void dfs(char[][] board, int i, int j, boolean[][] alive, boolean[][] visited) {if (i < 0 || i == M || j < 0 || j == N || visited[i][j]) return;visited[i][j] = true;if (board[i][j] == 'O') {alive[i][j] = true;dfs(board, i - 1, j, alive, visited);dfs(board, i + 1, j, alive, visited);dfs(board, i, j - 1, alive, visited);dfs(board, i, j + 1, alive, visited);}}
}

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

  1. 【BFS】LeetCode 130. Surrounded Regions

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

  2. 算法题目——被围绕的区域(dfs,bfs)

    leetcode.130被围绕的区域 dfs解法: 深度优先遍历: 思路: 读取数据后 1.先将数据的四周进行bfs算法(因为只有与外围接触的点,才能不被包围) 算法执行中时,递归看看该点的上下左右有 ...

  3. 130. Surrounded Regions 被围绕的区域

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

  4. 被围绕的区域(dfs)

    原创公众号:bigsai 欢迎加入力扣打卡 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 题目描述 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有被 'X' ...

  5. leetcode @python 130. Surrounded Regions

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

  6. [LeetCode] 130. Surrounded Regions Java

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

  7. LeetCode: Surrounded Regions [130]

    [题目] Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is cap ...

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

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

  9. 130 Surrounded Regions

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

最新文章

  1. 用好idea这几款插件,可以帮你少写30%的代码!
  2. 电脑录屏工具_屏幕录制工具有哪些?这些录屏软件须知
  3. 安卓代码拉下来编译后怎么运行_支付宝秒开是因为用了方舟编译器?官方回应...
  4. C# 中文件路径的操作
  5. gcc版本降级/升级
  6. html assign无效,Object.assign的一些用法
  7. 理解CSS3 max/min-content及fit-content等width值
  8. 计算机应用研究潜规则,基于相容矩阵计算的不完备决策系统规则获取算法
  9. 左右xcode的重构选项的一些理解
  10. 用AsyncTask来获取网络图片
  11. strtotime php,php strtotime函数怎么用
  12. 广州电子厂房净化工程_医药厂房净化车间工程验收,怎么测定风速风量和换气次数?...
  13. 蓝桥杯日期填空问题:高斯日记/星系炸弹
  14. python学习之多线程多进程
  15. (day 11 - 模拟)剑指 Offer 29. 顺时针打印矩阵
  16. URL编码与解码原理
  17. ios安卓模拟器_同步器使用教学【区分安卓和iOS】
  18. GC回收算法--当女友跟你提分手!
  19. 外贸网站 | 在NameCheap或NameSilo购买网站域名
  20. 阿里云域名注册+网站备案

热门文章

  1. HDU - 5176 The Experience of Love(并查集)
  2. HDU - 6153 A Secret(KMP的next数组性质/扩展KMP)
  3. 排序算法-08基数排序(python实现)
  4. mysql差几年,MySQL两时间计算、年份差、月份差、天数差
  5. mysql 随机分组_MySql分组后随机获取每组一条数据的操作
  6. POJ3020深度解析(二分图--最小路径覆盖)
  7. cocos2d-x游戏实例(14)-纵版射击游戏(1)
  8. EV3 直接命令 - 第 4 课 用两个驱动轮精确地移动小车
  9. chromium net android移植
  10. MySQL(一): 数据类型、库的操作、表的操作