337. 打家劫舍 III

Medium

思路

思路其实不是很复杂,只要能想到那个点。

以上,尝试写一下代码,TLE。

使用记忆化递归优化,减少重复计算,AC!

代码

python3

class Solution:
  @functools.lru_cache(None)
  def helper(self,node):
    if node is None:
      return 0
    #打劫根
    v1 = node.val
    if node.left:
      v1 += self.helper(node.left.left) + self.helper(node.left.right)
    if node.right:
      v1 += self.helper(node.right.left) + self.helper(node.right.right)
    #不打劫根
    v2 = self.helper(node.left) + self.helper(node.right)
    return max(v1,v2)

  def rob(self, root: TreeNode) -> int:
    return self.helper(root)