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

437 路径总和III

在这里插入图片描述
解题思路:
\qquad 这道题的诉求可以拆分成两部分:1 找到所有可能的路径;2 快速计算路径的和。
\qquad 由于题目要求路径方向是向下的,因而可以采用深度优先搜索(dfs) 的遍历方式,遍历所有的路径。
\qquad 对于这种累加和的问题,可以适用前缀和+Map的方式,进行快速计算。正常来说计算区间的前缀和需要遍历所有的元素累加,前缀和而是利用两个前缀和的差来计算。如果目标和targetSum是已知的,当前点的前缀和current是已知的,要找的区间开始节点的前缀和是可以计算 = current - targetSum,因而可以通过map快速查找。

	map<long long, int> m;

    int pathSum(TreeNode* root, int targetSum) {
       m[0] = 1;
       return searchTree(root, targetSum, 0);
    }
    
    int searchTree(TreeNode* root, int target, long long preSum)
    {
        int ans = 0;
        if(root == nullptr) return 0;
        preSum += root->val;
        if(m.count(preSum-target)) ans += m[preSum-target];
         m[preSum]++;
        ans += searchTree(root->left, target, preSum);
        ans += searchTree(root->right, target, preSum);
        m[preSum]--;
        return ans;
    }

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

相关文章:

  • windows C#-使用对象初始值设定项初始化对象
  • Linux 下处理 ^M 字符的最佳实践
  • flink-1.16 table sql 消费 kafka 数据,指定时间戳位置消费数据报错:Invalid negative offset 问题解决
  • 4.3 数据库HAVING语句
  • 图神经网络_图嵌入_SDNE
  • 智驾感知「大破局」!新一轮混战开启
  • 接口调用限频(代理模式+滑动窗口)
  • Electron【详解】菜单 Menu
  • tokenizer、tokenizer.encode、tokenizer.encode_plus比较
  • 打造两轮差速机器人fishbot:从零开始构建移动机器人
  • 前端开发 -- 自动回复机器人【附完整源码】
  • 如何检查交叉编译器gcc工具链里是否有某个库(以zlib库和libpng库为例)
  • 修炼之道 ---其四
  • 3.系统学习-熵与决策树
  • 福特汽车物流仓储系统WMS:开源了,可直接下载
  • CentOS下安装RabbitMQ
  • HNUST-数据分析技术课堂实验
  • 软件渗透测试如何做?渗透测试作用有哪些?
  • flask后端开发(4):模板访问对象属性和过滤器的使用
  • 短视频运营行业该如何选择服务器?
  • 使用FFmpeg进行拉流和推流操作
  • 运行Zr.Admin项目(后端)
  • 使用React Strict DOM改善React生态系统
  • 使用openvino加速部署paddleocr文本方向分类模型(C++版)
  • 质数分解,用sqrt缩小范围
  • Ps:在 Photoshop 中编辑视频