当前位置: 首页 > article >正文

算法刷题Day22:BM57 岛屿数量

题目链接

描述:
给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。
例如:
输入
[
[1,1,0,0,0],
[0,1,0,1,1],
[0,0,0,1,1],
[0,0,0,0,0],
[0,0,1,1,1]
]
对应的输出为3
(注:存储的01数据其实是字符’0’,‘1’)

思路

无需思路,全是套路。递归+visited数组 优雅控制四个方向。
写递归三部曲:退出条件,递归体,返回值。

代码

# 控制方向
directs = [(0, 1), (0, -1), (1, 0), (-1, 0)]

def dfs(grid, visited, lenx, leny, x, y):
	# 判断坐标轴是否合法
    if x < 0 or y < 0 or x >= lenx or y >= leny:
        return
	# 访问过的节点或者是0号节点就不用管了,直接return
    if visited[x][y] or grid[x][y]=='0':
        return
    visited[x][y] = True
    # 递归四个方向
    for dx, dy in directs:
        nx = x + dx
        ny = y + dy
        dfs(grid, visited, lenx, leny, nx, ny)
        
class Solution:
    def solve(self, grid: List[List[str]]) -> int:
        # write code here
        rows = len(grid)
        cols = len(grid[0])
        # 创建visited二维数组
        visited = [[False for _ in range(cols)] for _ in range(rows)]

        tag = 0 # 记录多少个岛
        for i in range(rows):
            for j in range(cols):
            	# 如果是1,且没有访问过,就递归访问
                if grid[i][j] == "1" and not visited[i][j]:   
                    tag += 1
                    dfs(grid, visited, rows, cols, i, j)
        return tag 

这个题,原来如此优雅


http://www.kler.cn/a/442799.html

相关文章:

  • 无源器件-电容
  • Linux--CPU系统资源命令查看--详解
  • Mysql--运维篇--空间管理(表空间,索引空间,临时表空间,二进制日志,数据归档等)
  • IntelliJ IDEA 主题插件
  • 深度学习中的常见初始化方法:原理、应用与比较
  • 【HarmonyOS Next NAPI 深度探索1】Node.js 和 CC++ 原生扩展简介
  • UUG 深圳站 | Unity 6 新功能详细介绍和演示
  • 鸿蒙app封装 axios post请求失败问题
  • 《机器学习》3.7-4.3end if 启发式 uci数据集klda方法——非线性可分的分类器
  • 深度学习试题及答案解析(一)
  • linux minio安装
  • 网络编程中的黏包和半包问题
  • 【MySQL】优雅的使用MySQL实现分布式锁
  • Go语言后台实现选中式导出excel文件
  • 鸿蒙NEXT开发案例:颜文字搜索器
  • [bug] StarRocks borker load意向之外的bug
  • 《C 语言携手 PaddlePaddle C++ API:开启深度学习开发新征程》
  • SEO初学者-搜索引擎如何工作
  • 练习题:一维数组
  • pytest入门三:setup、teardown
  • 【WRF教程第3.3期】预处理系统 WPS 详解:以4.5版本为例
  • 第十四届蓝桥杯Scratch国赛真题—转动的车轮
  • Android 上集成 TikTok SDK及数据归因
  • c#基于tcp的打印机共享程序可以打印图片
  • redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip
  • HttpSevletRequest Body信息不能被多次读取的问题