Time: 20190901
Type: Medium

题目描述

给定一个二维的矩阵,包含 ‘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)
链接:https://leetcode-cn.com/problems/surrounded-regions
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

处理思路是将外围的O单独思考。

X X X X
X O O X
X X O X
X O O X

从边界上的O开始DFS,如果能被探索到的表示和边界上的O相连,直到不相连的结束,相连的话就转成#保护起来。最后统一处理。

代码

class Solution:def solve(self, board: List[List[str]]) -> None:"""Do not return anything, modify board in-place instead."""if board == None or len(board) == 0:returnrow = len(board)col = len(board[0])# 剪枝: 小于3行的,都有气口,没有元素被包围if row < 3 or col < 3:returnfor i in range(row):self.dfs(board, i, 0)self.dfs(board, i, col - 1)for j in range(col):self.dfs(board, 0, j)self.dfs(board, row - 1, j)print(board)for i in range(row):for j in range(col):if board[i][j] == 'O':board[i][j] = 'X'if board[i][j] == '#':board[i][j] = 'O''''X X X XX O O XX X O XX O O XX X X XX O O XX X O XX O X X'''def dfs(self, board, i, j):if board == None:returnrow = len(board)col = len(board[0]) if i < 0 or i >= row or j < 0 or j >= col or board[i][j] != 'O':return # 结束蔓延board[i][j] = '#' # 探索到的元素没有到达递归结束条件就表示连上了气口# 递归拆解:上下左右探索self.dfs(board, i - 1, j)self.dfs(board, i + 1, j)self.dfs(board, i, j - 1)self.dfs(board, i, j + 1)

相似题目

Leetcode 79. 单词搜索
Leetcode 200.岛屿的个数

END.

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

  1. leetcode--130. 被围绕的区域

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

  2. leetcode130. 被围绕的区域(bfs)

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

  3. leetcode130. 被围绕的区域

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

  4. Leetcode--130. 被围绕的区域(java)

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

  5. 130.被围绕的区域

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

  6. 被围绕的区域(dfs)

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

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

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

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

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

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

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

最新文章

  1. spring @component的作用
  2. Java数据类型中String、Integer、int相互间的转换
  3. eclipse问题 - windows版
  4. flutter 图解_Flutter自绘组件:微信悬浮窗(三)
  5. 数据结构排序法之鸡尾酒排序法he快速排序法
  6. 学习《PythonWeb开发实战(董伟明)》中文PDF+源代码
  7. 电子商务专业需要考计算机证吗,电子商务必考的证有哪些
  8. 2-docker 安装
  9. SQLException:The server time zone value is unrecognized
  10. 美国人与欧洲人为什么都吃转基因食品?
  11. ETH基金会社区经理:以太坊改进流程EIP-1正在更新
  12. Javascript特效:天猫导航
  13. 365Key今天不能用了,感觉不爽
  14. S7-200SMART案例分析——伺服选型(一)
  15. 换掉7z-zip默认的ico图标,自定义压缩文件图标更美观。
  16. Proxmox VE的初试小探
  17. SQL SERVER/ROW_NUMBER() OVER (ORDER BY id)高效分页
  18. android killer java_android killer无法查看java源代码的解决方法
  19. 400 : perceived to be a client error 错误
  20. 在Ubuntu16.04下配置VSFTPD

热门文章

  1. python实验报告内容实现购物车系统_Python实现的购物车功能示例
  2. android date 组件,Android中TimePicker与DatePicker时间日期选择组件的使用实例
  3. 计算机课程设计评分表,课程设计的评分标准.doc
  4. 液晶显示屏怎么显示泰文_什么是LCD液晶显示屏
  5. dnspod ddns 下载_简约时尚休闲女装毛衣针织衫春装详情页_psd素材免费下载_ 750*13450像素(编号:24815329)...
  6. 文件的记录c语言程序,急求如何将下列C语言程序数据存储到文件中?
  7. StackedGAN详解与实现(采用tensorflow2.x实现)
  8. Java InputStream转换为String
  9. java方法_Java方法
  10. 随机数生成器python_Python中的随机数生成器