力扣每日练习(3.18)补

news/2024/7/20 22:07:13 标签: leetcode, 深度优先, 算法

200. 岛屿数量

岛屿是指上下左右都是被0包起来的。使用递归的方式,也就是深度优先搜索,需要确定终止条件,也就是badcase是什么情况出现的。
二叉树是递到叶子节点的时候,因为下面是空子树了;矩阵就是越界,元素坐标不在这个矩阵里了,结合本题还要包括元素进海了。
**解题思路:**从左到右、从上到下依次遍历元素,对于每个元素,检查是否是陆地;如果是,那么就递归检查上下左右有没有陆地,这样就能找到该岛屿的所有部分,并且将其标记为已走过,这样根据岛屿的其中一个元素(最先被遍历到)就得到了这个岛屿存在,并且不会再重复计数。

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        # 判断空值情况
        if not grid: return 0
        # 初始化矩阵长宽
        rows, cols = len(grid), len(grid[0])
        # 初始化岛屿数量
        num = 0

        # 递归函数
        def dfs(r,c):
            # 如果走错了,返回空
            if r<0 or c<0 or r>=rows or c>=cols or grid[r][c]!='1':
                return 
            # 走到的,标记为走过
            grid[r][c] = '2'
            # 四处走走
            dfs(r-1, c) # 上
            dfs(r+1, c) # 下
            dfs(r, c-1) # 左
            dfs(r, c+1) # 右
        
        # 从左到右,从上到下,依次走过每个坐标
        for r in range(rows):
            for c in range(cols):
                # 如果当前是陆地,就递归遍历
                if grid[r][c] == '1':
                    dfs(r,c)
                    num += 1
        return num


            

695. 岛屿的最大面积

跟上一题类似,但是要维护一个全局变量——最大的岛屿面积。在每次递归,我们都计数,累加遍历到的1的次数。这样就每次遍历岛屿得到岛屿的面积,不断比较,得到最终结果。

class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:

        if not grid: return 0

        # 初始化
        rows, cols = len(grid), len(grid[0])
        max_area = 0

        def dfs(r, c):
            if r<0 or c<0 or r>=rows or c>=cols or grid[r][c]!=1: 
                return 0
            # 当前为1,计数
            temp = 1 
            grid[r][c] = 2 # 修改走过的
            # 检查相邻的
            temp += dfs(r-1,c)
            temp += dfs(r+1,c)
            temp += dfs(r,c-1)
            temp += dfs(r,c+1)

            return temp

        # 从左到右,从上到下,依次走过每个坐标
        for r in range(rows):
            for c in range(cols):
                # 如果当前是陆地,就递归遍历
                if grid[r][c] == 1:
                    max_area = max(dfs(r,c), max_area)

        return max_area

129. 求根节点到叶节点数字之和

每条路径的值都是上一层的结果10后加当前节点的值,因此递归主体可以确定为当前路径值10+当前节点值。
在遇到叶子节点时,就应该返回当前路径值。
如果不是叶子节点,需要往左右子树继续递归。
寻找到所有可能的路径和,加起来。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def sumNumbers(self, root: Optional[TreeNode]) -> int:
        if not root: return 0

        # 递归,如果当前节点为空,则返回0
        def dfs(node, num):
            if not node:
                return 0
            # 不为空,则加上父节点的数*10
            num = num*10 + node.val
            # 如果左右子树均为空,则返回到该节点的总和
            if not node.left and not node.right: return num
            # 否则继续递归
            return dfs(node.left, num) + dfs(node.right, num)
        # 从根节点开始
        return dfs(root, 0)

http://www.niftyadmin.cn/n/5441695.html

相关文章

电影aac是什么意思?如何播放、转换、编辑aac?

"电影AAC"这个术语可能是指电影中的音频编码格式。AAC&#xff08;Advanced Audio Coding&#xff09;是一种常见的音频编码格式&#xff0c;通常用于压缩音频文件&#xff0c;以在保持高质量的同时减小文件大小。在电影中&#xff0c;AAC格式的音频通常用于提供高质…

ping 通ip,ping 不通域名

在linux 系统中&#xff0c;ping 通ip,ping 不通对应的域名时&#xff0c;可直接修改系统配置文件 vi /etc/hosts 加入 ip 域名

微信小程序多图列表页面性能问题为什么会出现?如何解决?

微信小程序中的多图列表页面性能问题主要是由于以下几个原因导致的&#xff1a; 图片过大&#xff1a;在多图列表页面中&#xff0c;如果图片过大&#xff0c;会导致页面加载时间过长&#xff0c;从而影响用户体验。请求过多&#xff1a;在多图列表页面中&#xff0c;如果一次…

springboot+itextpdf+thymeleaf+ognl根据静态模版文件实现动态生成pdf文件并导出demo

第一步&#xff1a;导入maven依赖 <!-- 导出为PDF依赖包 --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId></dependency><dependency><groupId>com.itextpdf</groupId><art…

完全理解ARM启动流程:Uboot-Kernel

内容共计5W字数&#xff0c;但是我还是很多地方说的不够尽兴。那么下次聊&#xff01; 前言 bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。 PC机上引导程序一般由BIOS开始执行&#xff0c;然后读取硬盘中位于MBR(Main Bo…

解密Mysql数据库引擎:探究其背后的神秘力量(二)

本系列文章简介&#xff1a; 在本系列文章中&#xff0c;我们将从MySQL的基础知识入手&#xff0c;逐步深入到数据库引擎的内部机制。我们将详细介绍MySQL中常用的几种数据库引擎&#xff0c;包括InnoDB、MyISAM等&#xff0c;分析它们的优缺点以及适用场景。同时&#xff0c;我…

从四化智造MES(WEB)到金蝶云星空通过接口配置打通数据

从四化智造MES&#xff08;WEB&#xff09;到金蝶云星空通过接口配置打通数据 ​​ ​​ 来源系统:四化智造MES&#xff08;WEB&#xff09; MES建立统一平台上通过物料防错防错、流程防错、生产统计、异常处理、信息采集和全流程追溯等精益生产和精细化管理&#xff0c;帮助…

java采集小程序联合航空官方

本文仅限学习研究讨论,切忌做非法乱纪之事 中国联合航空有限公司&#xff08;以下简称“中国联合航空”&#xff09;总部位于北京&#xff0c;现为中国东方航空股份有限公司&#xff08;以下简称“东航”&#xff09;旗下的全资子公司。中国联合航空成立于1986年12月26日&#…