已解决
lc437. 路径总和 III
来自网友在路上 174874提问 提问时间:2023-10-28 21:52:30阅读次数: 74
最佳答案 问答题库748位专家为你答疑解惑
两种解法
解法一:直接两个递归,但是重复的计算过多
解法二:前缀和求解!
package com.codeking.lc;import com.codeking.Node.TreeNode;import java.util.HashMap;
import java.util.Map;/*** @author xiongjl* @since 2023/10/28 14:57*/
public class lc437 {// 前缀和解法public int pathSum(TreeNode root, int targetSum) {// 考虑根节点map.put(0L, 1);DFS(root, targetSum, 0);return cnt;}Map<Long, Integer> map = new HashMap<>();int cnt = 0;void DFS(TreeNode node, long targetSum, long preSum) {if (node == null) {return;}preSum += node.val;cnt += map.getOrDefault(preSum-targetSum, 0);// 前缀和map.put(preSum, map.getOrDefault(preSum, 0) + 1);DFS(node.left, targetSum, preSum);DFS(node.right, targetSum, preSum);// 回溯map.put(preSum, map.get(preSum)- 1);}/* public int pathSum(TreeNode root, int targetSum) {if (root == null) {return 0;}int ret = DFS(root, targetSum);ret += pathSum(root.left, targetSum);ret += pathSum(root.right, targetSum);return ret;}*//*int DFS(TreeNode node, long targetSum) {int cnt = 0;if (node == null) {return 0;}int val = node.val;if (val == targetSum) {cnt++;}cnt += DFS(node.left, targetSum - val);cnt += DFS(node.right, targetSum - val);return cnt;}*/
}
查看全文
99%的人还看了
相似问题
- 数独·12中解法·anroid 数独小游戏·休闲益智小游戏
- LeetCode解法汇总2342. 数位和相等数对的最大和
- LeetCode解法汇总2300. 咒语和药水的成功对数
- Leetcode—2471.逐层排序二叉树所需的最少操作数目【中等】(置换环解法!)
- 【算法-链表4】环形链表2的两种解法
- 洛谷 P1020 [NOIP1999 普及组] 导弹拦截【一题掌握三种方法:动态规划+贪心+二分】最长上升子序列LIS解法详解
- 翻转二叉树(C++解法)
- leetcode:13. 罗马数字转整数(python3解法)
- 力扣218.天际线问题 线段树解法
- leetcode:189. 轮转数组(python3解法)
猜你感兴趣
版权申明
本文"lc437. 路径总和 III":http://eshow365.cn/6-27130-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: Oracle数据库设置归档模式(超级简单)
- 下一篇: 通达信高级使用:预先筛选股票池进行预警选股