198. House Robber

我以为 easy 题不会有 dp 的...

状态转换方程是 maxRob(n) = max(maxRob(n-2) + nums[n-1], maxRob(n-1)) ,即完整nums不变情况下,n长度的最大rob值是 (n-1)长度的最大rob(n-2)长度最大rob + nums第n项 中的较大值。

写出来的代码感觉不够dp style,改了个第二版,看起来更 dp 了但其实反而没第一版快。

class Solution:
    def rob(self, nums: List[int]) -> int:
        if not nums: return 0
        if len(nums) <= 2: return max(nums)
        
        dp = {0: 0, 1:nums[0], 2:max(nums[:2])}
        
        def maxRob(n):
            if n in dp: return dp[n]
            curMax = max(maxRob(n-2)+nums[n-1], maxRob(n-1))
            dp[n] = curMax
            return curMax
            
        return maxRob(len(nums))

Last updated

Was this helpful?