LeetCode 题解:198. 打家劫舍,动态规划(不缓存偷盗状态),JavaScript,详细注释
原题链接:198. 打家劫舍
解题思路:
对于第 i 个房子,有两种场景,偷或不偷:
* 如果不偷的话,dp[i] = dp[i - 1] + 0
* 如果偷的话,那么 i 之前的所有的可能情况,也就是dp[i] = Math.max(nums[i] + dp[i - 2], nums[i] + dp[i - 3], ...)
。如此可知,每一位都取了之前所有可能的最大值。那么就可以推导出dp[i - 2] > dp[i - 3] > dp[i - 4]...
,因此dp[i - 2]
之后的对比都可以省略。
状态转移方程:
dp[i] = Math.max(dp[i - 1] + 0, nums[i] + dp[i - 2])
。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/5cfc21bc59b3b4e6d903e1fc4】。文章转载请联系作者。
评论