封闭岛屿数量 -- 二维矩阵的dfs算法

2023-10-27

1254. 统计封闭岛屿的数目

这道题和 岛屿数量 – 二维矩阵的dfs算法 类似,区别在于不算边缘部分的岛屿,那其实很简单,把上⼀题中那些靠边的岛屿排除掉,剩下的就是「封闭岛屿」了。

关于岛屿的相似题目:

  1. 岛屿数量 – 二维矩阵的dfs算法
  2. 封闭岛屿数量 – 二维矩阵的dfs算法
  3. 统计封闭岛屿的数目
  4. 统计子岛屿
  5. 不同岛屿的数量

class closedIsland:
    """
    floodFill 算法
    1254. 统计封闭岛屿的数目
    https://leetcode.cn/problems/number-of-closed-islands/
    """
    def solution(self, grid: List[List[str]]) -> int:
        res = 0
        m, n = len(grid), len(grid[0])
        for j in range(n):
            # 先把靠上边的岛屿淹掉
            self.dfs_matrix(grid, 0, j)
            # 先把靠下边的岛屿淹掉
            self.dfs_matrix(grid, m-1, j)

        for i in range(m):
            # 先把靠左边的岛屿淹掉
            self.dfs_matrix(grid, i, 0)
            # 先把靠右边的岛屿淹掉
            self.dfs_matrix(grid, i, n-1)

        # 遍历grid,就是所有的封闭岛屿
        for i in range(m):
            for j in range(n):
                if grid[i][j] == 0:
                    res += 1
                    self.dfs_matrix(grid, i, j)

        return res

    def dfs_matrix(self, grid, i, j):
        m, n = len(grid), len(grid[0])

        # 跳出递归条件
        if i < 0 or i >= m or j < 0 or j >= n:
            return

        if grid[i][j] == 1:
            return

        grid[i][j] = 1
        self.dfs_matrix(grid, i - 1, j)  # 上
        self.dfs_matrix(grid, i + 1, j)  # 下
        self.dfs_matrix(grid, i, j - 1)  # 左
        self.dfs_matrix(grid, i, j + 1)  # 右

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

封闭岛屿数量 -- 二维矩阵的dfs算法 的相关文章

  • 《LeetCode力扣练习》代码随想录——哈希表(四数之和---Java)

    LeetCode力扣练习 代码随想录 哈希表 四数之和 Java 刷题思路来源于 代码随想录 18 四数之和 排序双指针 class Solution public List
  • leetcode 每日一题

    https leetcode cn problems invert binary tree submissions 这个题目我们的思路其实很简单 遇到空就是得返回空指针 因为要进行交换 但是这里有个小细节 就是我们的把他的左右节点进行保存
  • leetcode对称二叉树(每日一题)

    https leetcode cn problems symmetric tree description 今天我们在来个题目 对称二叉树 其实这道题的思路我觉得和那到判断两棵树是不是相同的题目很相似 写这个题目的思路还是递归 但是我们看这
  • 【数据结构入门精讲 | 第二篇】一文讲清算法复杂度

    上篇文章中我们引入了算法 数据结构 数据类型等概念 而要想衡量一个算法与数据结构是否为优质的 就需要一个衡量标准 这个衡量标准也是在我们实现一个好的算法时要遵循的原则 目录 基本概念 渐进性态 渐进性态数学表征 算法复杂度的运算 顺序搜索算
  • leetcode每日一题

    https leetcode cn problems subtree of another tree 这道题需要使用我们之前做过的一道题 那道题我们是来判断两颗树是不是相同的树 这里我们就需要用上这个接口函数 然后思路就是遍历左树和右树来看
  • 【数据结构】双链表的定义和操作

    目录 1 双链表的定义 2 双链表的创建和初始化 3 双链表的插入节点操作 4 双链表的删除节点操作 5 双链表的查找节点操作 6 双链表的更新节点操作 7 完整代码 嗨 我是 Filotimo 很高兴与大家相识 希望我的博客能对你有所帮助
  • 【数据结构】单链表的定义和操作

    目录 1 单链表的定义 2 单链表的创建和初始化 3 单链表的插入节点操作 4 单链表的删除节点操作 5 单链表的查找节点操作 6 单链表的更新节点操作 7 完整代码 嗨 我是 Filotimo 很高兴与大家相识 希望我的博客能对你有所帮助
  • LeetCode-数组-矩阵问题-中等难度

    toc 矩阵 矩阵是二维数组相关的应用题型 常见的有矩阵水平翻转 矩阵对角线翻转 矩阵遍历等 1 重塑矩阵 1 1 题目描述 leetcode跳转 566 重塑矩阵 1 2 方法一 简单模拟 借助一个一维数组用来保持按行列遍历的结果 然后再
  • 【map】【单调栈 】LeetCode768: 最多能完成排序的块 II

    作者推荐 贪心算法 中位贪心 执行操作使频率分数最大 涉及知识点 单调栈 排序 map 区间合并 题目 给你一个整数数组 arr 将 arr 分割成若干 块 并将这些块分别进行排序 之后再连接起来 使得连接的结果和按升序排序后的原数组相同
  • 【LeetCode刷题笔记】位运算

    231 2 的幂 解题思路 1 除法 不断循环判断 如果能被 2 整除 就不断除以 2 直到不能被 2 整除为止 最后结果如果是 1
  • 面试150-13(Leetcode238除自身以外数组的乘积)

    代码 class Solution public int productExceptSelf int nums int n nums length int res new int n int product 1 int zerocnt 0
  • 【LeetCode刷题笔记】位运算

    231 2 的幂 解题思路 1 除法 不断循环判断 如果能被 2 整除 就不断除以 2 直到不能被 2 整除为止 最后结果如果是 1
  • 面试150-13(Leetcode238除自身以外数组的乘积)

    代码 class Solution public int productExceptSelf int nums int n nums length int res new int n int product 1 int zerocnt 0
  • LeetCode 1901. 寻找峰值 II

    一 题目 1 题目描述 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子 上 下 左 右 的元素 给你一个 从 0 开始编号 的 m x n 矩阵 mat 其中任意两个相邻格子的值都 不相同 找出 任意一个 峰值 mat i j
  • 《LeetCode力扣练习》代码随想录——双指针法(反转链表---Java)

    LeetCode力扣练习 代码随想录 双指针法 反转链表 Java 刷题思路来源于 代码随想录 206 反转链表 双指针 Definition for singly linked list public class ListNode int
  • Leetcode 45 跳跃游戏 II

    题意理解 给定一个长度为 n 的 0 索引 整数数组 nums 初始位置为 nums 0 每个元素 nums i 表示从索引 i 向前跳转的最大长度 还是从初始坐标i 0的位置到达最后一个元素 但是问题不是能不能跳到 而是 最少几步能跳到最
  • 【每日一题】2397. 被列覆盖的最多行数-2024.1.4

    题目 2397 被列覆盖的最多行数 给你一个下标从 0 开始 大小为 m x n 的二进制矩阵 matrix 另给你一个整数 numSelect 表示你必须从 matrix 中选择的 不同 列的数量 如果一行中所有的 1 都被你选中的列所覆
  • 「优选算法刷题」:移动零

    嗨 这个假期罗根开始接触了算法 在为今年的蓝桥杯做准备 所以 开个新专栏 记录记录自己做算法题时的心得 一 题目 给定一个数组 nums 编写一个函数将所有 0 移动到数组的末尾 同时保持非零元素的相对顺序 请注意 必须在不复制数组的情况下
  • 『力扣刷题本』:逆波兰表达式求值

    大家好久不昂 最近 1 个多月罗根一直在备考期末 文章发的很少 现在已经放寒假啦 学习自然也不能拉下 毕竟 4 月份就要去参加蓝桥杯了 先给自己定个小目标 日更 2 篇 咳咳 下面马上开始讲题 一 题目 给你一个字符串数组 tokens 表
  • 扬帆证券:A股高股息资产“画像”:连续数年跑赢大盘

    近期A股分红 大方 股息率较高的板块再次引起关注 走势显着强于同期大盘 并继续遭到商场追捧 有专家在接受证券时报记者采访时以为 近年A股商场高股息财物受捧背面 有多种要素在发挥作用 包含高股息财物本身具有的出资优势 微观经济布景 出资者心态

随机推荐

  • Python生成随机数,并将生成的随机数组成10道加减乘除的基本算术题目

    编写一个小学生算术能力测试题 提供10道加减乘除四种基本算术运算的题目 联系者根据显示的题目输入自己的答案 程序自动判断输入的答案是否正确并显示出相应的信息 生成一到一百的随机数 import random x random randint
  • SRM系统是什么?

    SRM全称Supplier Relationship Management 即供应商关系管理 SRM管理系统即供应商关系管理系统 供应商管理系统是采购管理系统的一个子系统 也是采购管理系统的一个重要模块 是用于改进企业与供应商关系的联系 完
  • Mysql主键约束和唯一约束

    Mysql约束 1 作用 约束定义为确保数据完整性必须遵循的规则 约束可以在创建表的过程中创建 也可以稍后再添加 在创建表后添加约束时 它将检查现有数据以确定其是否违背该约束 如果现有数据违背了将添加的约束 那么将不会向指定列施加该约束 2
  • 找不到文件、主类名和文件名不一致、缺少分号的解决方法

    1 找不到文件 解决方法 源文件名不存在或写错 或者当前路径错误 2 主类名和文件名不一致 解决方法 声明为public的主类应与文件名一致 否则编译失败 3 缺少分号 解决方法 编译失败 注意错误出现的行数 再到源代码中指定位置改错
  • shell实例流程控制&函数

    条件 if then elif then fi if的条件部分经常使用test EXPRESSION或 EXPRESSION 实现 test的用法可以参见test if 条件1 if 条件1 then then 执行语句1 elif 条件2
  • MetaMask安装使用指南

    前言 MetaMask是一个以太坊钱包插件 虽然只能在Chrome浏览器中使用 但作为以太坊钱包的metamask却很受以太坊开发者欢迎 MetaMask除了是一个简单的钱包 它主要卖点是让使用者可以很容易跟以太坊的智能合约互动 或者说说M
  • DLUT C++上机作业(实验六)

    注意 博客所有代码在VS上均能编译通过 codeblocks等编译器可能因为某些变量名无法识别而无法编译 我的VS上不能用end做变量名就很迷呀 2 有一个交通工具类vehicle 将它作为基类派生小车类car 卡车类truck和轮船类bo
  • Java面试必备,JVM核心知识点总结!

    JVM基础 程序计数器 Program Counter Register CPU中的寄存器 作用 记住下一条JVM指令 特点 线程私有 唯一一个不会出现内存溢出的区域 虚拟机栈 Java virtual mechine Stack 线程私有
  • 数据库查询: 列出表的所有字段,“*”符号,查询指定字段数据,DISTINCT查询,IN查询,BETWEEN AND查询,LIKE模糊查询,对查询结果排序,分组查询,统计分组查询

    数据库查询 列出表的所有字段 符号 查询指定字段数据 DISTINCT查询 IN查询 BETWEEN AND查询 LIKE模糊查询 对查询结果排序 分组查询 统计分组查询 列出表的所有字段 通过SQL语句SELECT列出表的所有字段 具体语
  • 软考-嵌入式系统设计师-笔记:嵌入式系统软件基础知识

    文章目录 嵌入式软件基础知识 嵌入式操作系统基础知识 任务调度 信号量 页面置换算法 嵌入式系统程序设计 嵌入式软件基础知识 嵌入式软件分类 系统软件 控制和管理嵌入式系统资源 为嵌入式应用提供支持的各种软件 如设备驱动程序 嵌入式操作系统
  • build中配置resource配置,来防止资源导出失败

  • 我最喜爱的十大技术文档写作工具

    转载 老实说 我爱死微软的Word了 Adobe FrameMaker也曾辉煌过 不过你懂的 这东西有时候会令人抓狂 过去5年来 我一直使用同一套写作工具 我也曾尝试过一些新的工具 可我最终还是很专情于我的老相好们 在这里我总结了一下我所用
  • MATLAB中GUI界面内数据的读取和存储操作

    要求GUI界面的输入数据为int16中频数据文件 输出数据也为int16中频数据文件 第一步 获取数据函数 uigetfile 先自己存储数据用于验证 将仿真数据以int16的格式存于txt文件中 分I O两路 I路代表实部 O路代表虚部
  • STM32f10x学习----ADC和DMA功能 后附具体操作及使用过程中遇到的问题

    学习某一个东西 我们首先要了解这个东西的定义是什么 用来干什么的 怎么用 用的过程中有什么注意事项 这些都OK了 那么我们就算是基本掌握他了 0 前言 ADC Analog to Digital Converter的缩写 指模 数转换器或者
  • PyTorch错误定位系列之CUDA error: device-side assert triggered

    PyTorch错误定位系列之CUDA error device side assert triggered Introduction 本栏目只是提供一些自己遇到的错误的解决思路 Background 我昨天写了个模型加了focal loss
  • 遗传算法GA优化BP神经网络(GA-BP)回归预测-Matlab代码实现

    一 前言 代码获取 评论区或者私信获取 遗传算法 Genetic Algorithm GA 和反向传播神经网络 Backpropagation Neural Network BPNN 都是常用的优化算法和模型 可以联合使用进行回归预测问题的
  • python多线程低效问题

    重点 Python由于有全锁局的存在 同一时间只能有一个线程执行 并不能利用多核优势 终于找到cpu利用率低的原因了 Python解释执行原理 我是一个Python线程 我的工作就是解释执行程序员编写的Python代码 之所以说是解释执行
  • 2018年Android最新面试题(一)

    最近在忙着找工作 所以趁热打铁写一份Android最新的面试题 希望可以帮助到大家 一直被问的问题Glide的源码 重点 最好和Picasso比较着说 Glide原理 自己看 https www jianshu com p 3d699bf0
  • APP过度索取问题严重,该如何有效解决?

    近几年移动应用市场发展快速 APP种类功能繁多 给人们的生活和工作带来了无限便捷 然而事物的发展必然有对立面 APP获取用户数据问题突出 同时加大了信息泄露的风险 工信部及各通信管理局等相关部门针对APP问题频频通报 使得移动应用开发商处于
  • 封闭岛屿数量 -- 二维矩阵的dfs算法

    1254 统计封闭岛屿的数目 这道题和 岛屿数量 二维矩阵的dfs算法 类似 区别在于不算边缘部分的岛屿 那其实很简单 把上 题中那些靠边的岛屿排除掉 剩下的就是 封闭岛屿 了 关于岛屿的相似题目 岛屿数量 二维矩阵的dfs算法 封闭岛屿数