198.House Robber

25 年 8 月 6 日 星期三
207 字
2 分钟

198. 打家劫舍

Screenshot 2025-09-01 at 5.13.28 pm

为避免负数下标,也可以让 i 从2 开始

Screenshot 2025-09-01 at 4.55.58 pm
python
class Solution:
    def rob(self, nums: List[int]) -> int:
        # dfs
        @cache
        # n 属于 [-1, n-1] 有n+1个数
        def dfs(n):
            if n < 0:
                return 0
            return max(dfs(n-1), dfs(n-2)+nums[n])
        return dfs(len(nums)-1)
python
class Solution:
    def rob(self, nums: List[int]) -> int:
        n = len(nums)
        f = [0] * (n+2) # 有n+2个数!!! 属于 [0, n+1]
        # n+2来自于i+2,dfs的i最大是n-1,经过n+2之后,就是n+1,所以长度为n+2
        # i 只负责对应 n+2
        for i, x in enumerate(nums):
            f[i+2] = max(f[i+1], f[i]+x)
        return f[n+1]

有不少同学问我为什么 nums【i】 中的 i 不需要 +2。

另外一种理解方式是,我们只是在 f 数组的开头插入了两个状态,对应记忆化搜索中的 dfs(-2) 和 dfs(-1),

这只会影响到 f 的下标,不会影响到 nums 的下标。

文章标题:198.House Robber

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/198house_robber[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。