Skip to content

337 house robber iii

337. House Robber III

题目: https://leetcode.com/problems/house-robber-iii/

难度: Medium

思路:

参考 https://www.hrwhisper.me/leetcode-house-robber-iii/

这个解法好像有点厉害

从root开始抢起来,最大能抢到的两个可能: 抢root和不抢root

  • rob_root = max(rob_L + rob_R , no_rob_L + no_nob_R + root.val)
  • no_rob_root = rob_L + rob_R

这个递归写起来就很厉害了

class Solution(object):
    def rob(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        def dfs(root):
            if not root: return 0, 0
            rob_L, no_rob_L = dfs(root.left)
            rob_R, no_rob_R = dfs(root.right)
            return max(no_rob_R + no_rob_L + root.val , rob_L + rob_R), rob_L + rob_R

        return dfs(root)[0]

对于每个node,我们return的是从这个node能抢到的最大值,以及不抢它能获得的最大值,这个递归简直我服



回到顶部