返回
算法打卡 - Leetcode-20210524:路径总和III
前端
2023-12-26 01:51:49
前言
LeetCode是一家专注于算法和编程问题的在线学习平台,为用户提供海量的算法题库和丰富的学习资源。LeetCode算法题库涵盖了从基础到高级的各个领域的算法问题,是算法爱好者和程序员提升算法技能的理想选择。
算法题解
今天我们来一起学习LeetCode上的路径总和III算法题。该算法题要求我们给定一个二叉树,它的每个结点都存放着一个整数值。我们需要找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
为了解决这个问题,我们可以使用动态规划的方法。动态规划是一种自底向上的算法设计方法,它将问题分解成子问题,并逐步求解这些子问题,最终得到整个问题的解。
在路径总和III算法题中,我们可以将子问题定义为:从给定节点出发,经过若干个结点,到达另一个结点的路径和为给定数值的路径总数。然后,我们可以通过递归或迭代的方法逐步求解这些子问题。
以下是路径总和III算法的详细步骤:
- 从根节点开始,对树进行深度优先搜索。
- 在每个结点,计算从该结点出发,经过若干个结点,到达另一个结点的路径和为给定数值的路径总数。
- 将该路径总数添加到结果中。
- 继续搜索该结点的子节点,直到所有的结点都被搜索完。
以下是路径总和III算法的Python实现:
def pathSum(root, targetSum):
"""
:type root: TreeNode
:type targetSum: int
:rtype: int
"""
if not root:
return 0
# 计算从根节点出发,经过若干个结点,到达另一个结点的路径和为给定数值的路径总数
path_sum = 0
stack = [(root, [root.val])]
while stack:
node, path = stack.pop()
if not node.left and not node.right:
if sum(path) == targetSum:
path_sum += 1
else:
if node.left:
stack.append((node.left, path + [node.left.val]))
if node.right:
stack.append((node.right, path + [node.right.val]))
# 计算从根节点出发,经过若干个结点,到达另一个结点的路径和为给定数值的路径总数
path_sum += pathSum(root.left, targetSum)
path_sum += pathSum(root.right, targetSum)
return path_sum
运行结果
以下是路径总和III算法在LeetCode上的运行结果:
Input: root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
Output: 3
Explanation: The paths that sum to 8 are:
1. 10 -> 5 -> 3
2. 10 -> 5 -> 2 -> 1
3. 10 -> -3 -> 11
总结
路径总和III算法题是一道经典的算法题,它考察了我们对动态规划算法的理解和应用能力。通过这道算法题,我们可以学习到如何使用动态规划的方法解决复杂的问题。
希望这篇文章对您有所帮助。如果您有任何问题或建议,欢迎在评论区留言。