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

Leetcode 路径总和 III

L

java 解法一:双递归

class Solution {
    public int pathSum(TreeNode root, long targetSum) { //外层递归,把每个节点都当作路径起点
        if(root == null) return 0;
        int ret = rootSum(root, targetSum);
        ret += pathSum(root.left, targetSum);
        ret += pathSum(root.right, targetSum);
        return ret;
    }

    public int rootSum(TreeNode node, long targetSum) { //内层递归,
    //从当前节点往下探索路径,看是否存在一条或多条路径满足 路径和为 targetSum
        if(node == null) return 0;

        int ret = 0;
        if(node.val == targetSum) {
            ret++;
        }
        ret += rootSum(node.left, targetSum - node.val);
        ret += rootSum(node.right, targetSum - node.val);
        return ret;
    }
}

解法二:前缀和 + 回溯

class Solution {
    public int pathSum(TreeNode root, int targetSum) {
        // 首先创建一个hashmap
        // key: 前缀和, value: 该前缀和出现的次数
        Map<Long, Integer> prefixSumCount = new HashMap<>();
        prefixSumCount.put(0L, 1); //初始化前缀和为0的路径数量
        return dfs(root, 0L, targetSum, prefixSumCount);
    }

    private int dfs(TreeNode node, long curSum, int targetSum, Map<Long, Integer> prefixSumCount) {
        if(node == null) return 0;

        curSum += node.val; //更新curSum
        //先查找有多少前缀和满足 curSum - targetSum
        int count = prefixSumCount.getOrDefault(curSum - targetSum, 0);

        //然后更新prefixSumCount
        prefixSumCount.put(curSum, prefixSumCount.getOrDefault(curSum, 0) + 1);

        //递归左右子树
        count += dfs(node.left, curSum, targetSum, prefixSumCount);
        count += dfs(node.right, curSum, targetSum, prefixSumCount);

        //回溯撤销
        prefixSumCount.put(curSum, prefixSumCount.get(curSum) - 1);

        return count;
    }
}
http://www.dtcms.com/a/92514.html

相关文章:

  • 振弦采集读数仪 智能型 支持振弦、温度、电压、电流测量,无线传输 自动化操作 适用地质灾害与土木工程监测
  • Java条码与二维码生成技术详解
  • 3.2 罗必达法则
  • 23种设计模式-状态(State)设计模式
  • Vala编成语言教程-构造函数和析构函数
  • SQL注入零基础学习二MYSQL手工注入
  • 23种设计模式中的中介者模式
  • 腾讯pcg客户端一面
  • 【移动应用开发】任务4 创建系统主界面
  • 【AVRCP】深度解析蓝牙高速(AMP)在封面艺术传输中的应用:低延迟体验的工程实践
  • java使用小知识合集(持续更新中)
  • etcd性能测试
  • 前端空白/红幕报错 undefined
  • Tensorrt的安装、转化、以及推理
  • 李飞飞、吴佳俊团队新作:FlowMo如何以零卷积、零对抗损失实现ImageNet重构新巅峰
  • 虚拟机(二):Android 篇
  • 【春招笔试】阿里云2025.03.20
  • 用C#实现UDP服务器
  • 线程概念与控制(上)
  • 小智AI音频开发 libopus + Eclipse C/C++ MinGW 编解码测试用例
  • Leetcode 最小基因变化
  • 鸿蒙生态圈暗战:数字孪生三强争霸谁将主宰消费电子未来?
  • 【MySQL数据库】视图 + 三范式
  • Zabbix监控K8s集群
  • C语言do...while语句将数字反转后输出
  • Linux内核NIC网卡驱动实战案例分析
  • 【AI】先搞明白MCP、 API、ANP、Agora、agents.json、LMOS、AITP开源通信协议再学大模型
  • “十五五”时期航空弹药发展环境分析
  • 生物化学笔记:医学免疫学原理06 抗体药物 多克隆抗体+单克隆抗体(各代单克隆抗体发展历程)
  • Oracle Database In-Memory 23ai 新特性