LeetCode--HOT100题(48)

news2024/11/24 15:50:03

目录

  • 题目描述:437. 路径总和 III(中等)
    • 题目接口
    • 解题思路
    • 代码
  • PS:

题目描述:437. 路径总和 III(中等)

给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum路径 的数目。
路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

LeetCode做题链接:LeetCode-路径总和 III

示例 1:
在这里插入图片描述

输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
输出:3
解释:和等于 8 的路径有 3 条,如图所示。

示例 2:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:3

提示:

二叉树的节点个数的范围是 [0,1000]
-109 <= Node.val <= 109 
-1000 <= targetSum <= 1000 

题目接口

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int pathSum(TreeNode root, int targetSum) {

    }
}

解题思路

主要思路:

  1. 定义一个哈希表preSumMap,用于存储前缀和及其出现次数。同时,将目标和target初始化为给定的目标和。
  2. 调用递归函数recur来计算从根节点到叶子节点的路径和等于目标和的路径数量。
  3. 在递归函数中,首先判断当前节点是否为空,如果为空则返回0,表示没有符合条件的路径。
  4. 计算当前路径和curNum,即当前节点的值与前缀和的和。
  5. 使用哈希表preSumMap查询curNum-target的前缀和出现的次数,如果不存在则默认为0。将结果存入res变量中。
  6. 更新哈希表preSumMap,将curNum的出现次数加1。
  7. 递归调用左子树和右子树,分别传入curNum作为新的前缀和,并将返回的结果累加到res中。
  8. 回溯时,将哈希表preSumMap中curNum的出现次数减1,以便后续其他路径使用。
  9. 返回res,即符合条件的路径数量。

通过递归地遍历二叉树的每个节点,并利用前缀和和哈希表进行动态规划,可以在O(N)的时间复杂度内求解路径和问题,其中N是二叉树的节点数。

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    // 用于存储前缀和及其出现次数的哈希表
    Map<Long, Long> preSumMap;
    // 目标和
    Long target;

    public int pathSum(TreeNode root, int targetSum){
        preSumMap = new HashMap<>();
        target = Long.valueOf(targetSum);
        preSumMap.put(0L, 1L);

        return recur(root, 0L).intValue();
    }

    // 递归函数,计算从根节点到叶子节点的路径和等于目标和的路径数量
    private Long recur(TreeNode root, Long preSum){   //返回以root为根节点的符合题目条件的答案个数
        if(root == null) return 0L;
        Long curNum = Long.valueOf(root.val + preSum); //当前路径和
        Long res = preSumMap.getOrDefault(Long.valueOf(curNum-target), 0L); //更新答案
        preSumMap.put(Long.valueOf(curNum), preSumMap.getOrDefault(curNum, 0L)+1); //更新前缀和出现的次数

        res += recur(root.left, curNum);        //递归左子树
        res += recur(root.right, curNum);        //递归右子树

        preSumMap.put(Long.valueOf(curNum), preSumMap.get(curNum)-1); //回溯时,将当前前缀和的出现次数减1
        return res;
    }
}

成功!
在这里插入图片描述

PS:

感谢您的阅读!如果您觉得本篇文章对您有所帮助,请给予博主一个喔~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/974703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python数据分析实战-将字符串中的空格替换为逗号且要保留特定词组(附源码和实现效果)

实现功能 将字符串中的空格替换为逗号且要保留特定词组 实现代码 import restring "Linux Python Cloud Native Distributed System AI C Deep Learning Framework Micro Service Automation Git IoT"# 定义要保留的特定词组 special_phrases ["Deep Learn…

新手可以选黄金代理吗?

我们都知道选择现货黄金平台的时候&#xff0c;一定要选择一个正规的、合法的平台&#xff0c;这样投资者才可以安心进行交易&#xff0c;但是目前市面上我们看到很多的是黄金代理&#xff0c;而不是直接与现货黄金平台发生接触&#xff0c;那么&#xff0c;这种黄金代理在市场…

如何根据需求正确选择适合企业的CRM销售管理系统

现代企业的销售工作离不开使用各种各样的销售管理系统&#xff0c;随着互联网的发展&#xff0c;市面上出现了许多销售管理系统&#xff0c;那么销售管理系统哪种好呢&#xff1f;如何选择一款适合自己企业的CRM销售管理系呢&#xff1f;本文将从多个角度进行分析和比较为大家提…

nc前端合计行

nc前端合计行 1.无表体和单表体的合计行加法 只要卡片下 如果是只有表头要合计行就只留ShowTotalLine&#xff1b;如果是只有表体要合计行就只留ShowTotalLineTabcodes 2.多表体的合计行加法 表头卡片下和列表下都要 3.档案的合计行加法 重写一下列表模板

C++(18):异常处理

异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理。 异常使得能够将问题的检测与解决过程分离开来&#xff1a;程序的一部分负责检测问题的出现&#xff0c;然后解决该问题的任务传递给程序的另一部分。检测环节无须知道问题处理模块的…

基于 Web HID API 的HID透传测试工具(纯前端)

前言 最近再搞HID透传 《STM32 USB使用记录&#xff1a;HID类设备&#xff08;后篇&#xff09;》 。 市面上的各种测试工具都或多或少存在问题&#xff0c;所以就自己写一个工具进行测试。目前来说纯前端方案编写这个工具应该是最方便的&#xff0c;这里放上相关代码。 项目…

通过idea实现springboot集成mybatys

概述 使用springboot 集成 mybatys后&#xff0c;通过http请求接口&#xff0c;使得通过http请求可以直接直接操作数据库&#xff1b; 完成后端功能框架&#xff1b;前端是准备上小程序&#xff0c;调用https的请求接口用。简单实现后端框架&#xff1b; 详细 springboot 集…

qt中子窗口最小化后再恢复显示窗口区域显示为全白色

问题&#xff1a; qt中子窗口最小化后再恢复显示窗口区域显示为全白色&#xff0c;如下图&#xff1a; 原因&#xff1a; 恢复显示后窗口为及时刷新。 解决办法&#xff1a; 重写showEvent函数&#xff0c;如下&#xff1a; void MyClass::showEvent(QShowEvent *event) {se…

OS | 第5章 插叙:进程API

OS | 第5章 插叙&#xff1a;进程API 文章目录 OS | 第5章 插叙&#xff1a;进程API5.1 fork()系统调用代码过程分析 5.2 wait()系统调用5.3 exec() 系统调用执行过程 为什么这样设计API&#xff1f;shell执行过程shell 重定向pipe()>>>>> 欢迎关注公众号【三戒…

YOLOv5:解读metrics.py

YOLOv5&#xff1a;解读metrics.py 前言前提条件相关介绍metrics.pyfitnesssmoothbox_iouConfusionMatrix ★ ★ \bigstar\bigstar ★★bbox_iou ★ ★ \bigstar\bigstar ★★compute_apap_per_class&#xff08;难度&#xff1a; ⋆ ⋆ ⋆ ⋆ ⋆ \star\star\star\star\star ⋆…

openpnp - 底部相机高级矫正后,底部相机看不清吸嘴的解决方法

文章目录 openpnp - 底部相机高级矫正后,底部相机看不清吸嘴的解决方法概述解决思路备注补充 - 新问题 - N1吸嘴到底部相机十字中心的位置差了很多END openpnp - 底部相机高级矫正后,底部相机看不清吸嘴的解决方法 概述 自从用openpnp后, 无论版本(dev/test), 都发现一个大概…

mac建议装双系统吗,详细分析苹果电脑双系统的利弊

mac建议装双系统吗&#xff0c;Mac电脑上安装双系统有哪些利弊呢&#xff0c;一起来看看吧&#xff01; 苹果Mac电脑安装双系统利&#xff1a; 1、用来办公更加方便&#xff1a;苹果系统功能也是很强大的&#xff0c;但是用来办公非常不方便&#xff0c;是由于一些常用的exe软…

Error: The project seems to require yarn but it‘s not installed.

把之前做过的vue项目拷贝到新电脑上&#xff0c;运行启动命令后发现报了如下错误&#xff1a; 我是这么解决的&#xff1a; 是因为项目中存在yarn.lock 文件&#xff0c;先把这个文件删除掉。 把这个文件删除后&#xff0c;执行如下命令&#xff1a; npm install -g yarn 下…

Docker Desktop 设置镜像环境变量

点击run 展开Optional settings container name &#xff1a;容器名称 Ports&#xff1a;根据你需要的端口进行输入&#xff0c;不输入则默认 后面这个 比如我这个 5432 Volumes&#xff1a;卷&#xff0c;也就是做持久化 需要docker 数据保存的地方 Environment variables…

TCP的滑动窗口协议有什么用?

分析&回答 滑动窗口协议&#xff1a; TCP协议的使用维持发送方/接收方缓冲区 缓冲区是 用来解决网络之间数据不可靠的问题&#xff0c;例如丢包&#xff0c;重复包&#xff0c;出错&#xff0c;乱序 在TCP协议中&#xff0c;发送方和接受方通过各自维护自己的缓冲区。通…

react16之前diff算法的理解和总结

此篇文章所讨论的是 React 16 以前的 Diff 算法。而 React 16 启用了全新的架构 Fiber&#xff0c;相应的 Diff 算法也有所改变&#xff0c;本片不详细讨论Fiber。 fiber架构是为了支持react进行可中断渲染&#xff0c;降低卡顿&#xff0c;提升流畅度。 react16之前的版本&…

什么是standard cell (标准单元) ?

参考文章&#xff1a; 聊一聊芯片后端的标准单元-standard cell - 知乎 (zhihu.com) standard cell中的7T和9T中的"T"指的是什么&#xff1f;或者是什么的缩写&#xff1f; - Layout讨论区 - EETOP 创芯网论坛 (原名&#xff1a;电子顶级开发网) - 数字后端基本概念介…

qemu-system-x86_64 命令创建虚拟机,报gtk initialization failed的

因为是ssh命令行启动&#xff0c;增加--nographic # /opt/debug/bin/qemu-system-aarch64 -machine virt-6.2 -qmp tcp:localhost:1238,server,nowait --nographic configure accelerator virt-6.2 start machine init start cpu init start add rom file: virtio-net-pci…

GIT实战篇,教你如何使用GIT可视化工具

系列文章目录 手把手教你安装Git&#xff0c;萌新迈向专业的必备一步 GIT命令只会抄却不理解&#xff1f;看完原理才能事半功倍&#xff01; 快速上手GIT命令&#xff0c;现学也能登堂入室 GIT实战篇&#xff0c;教你如何使用GIT可视化工具 系列文章目录一、GIT有哪些常用工具…

漆包线工厂云MES解决方案

漆包线行业老板痛点&#xff1a; 1.漆包线比较传统的行业&#xff0c;一般都是靠人工去管理&#xff0c;老板想及时知道工厂的生产&#xff0c;销售、出入库、库存情况&#xff1b; 2.型号多称重打印易错&#xff0c;没有系统前 &#xff1a;称重打印&#xff0c;出入库&#x…