LeetCode 题解:213. 打家劫舍 II,动态规划(缓存偷盗状态),JavaScript,详细注释
原题链接:https://leetcode-cn.com/problems/house-robber-ii/
解题思路:
该题在213. 打家劫舍 II的基础上,将首尾的房屋连接在一起,也就产生了两个场景:
* 偷了第一户,最后一户不能偷,等同于从第一户偷到倒数第二户。
* 偷了最后一户,第一户不能偷,等同于从第二户偷到最后一户。
于是我们可以把房屋分成两段分别处理,然后再将得到的结果一起取最大值即可。
状态转移方程分析:
* 对于第i
户人家,有偷和不偷两种可能。
* 如果偷,i - 1
户人家只能不偷。
* 如果不偷,i - 1
户人家偷不偷都可以,此时取i - 1
户两个状态的最大值即可。
* 状态转移方程:dp[i] = [dp[i - 1][1] + nums[i], Math.max(dp[i - 1][0], dp[i - 1][1])];
。
* 偷到最后一户时,只需要取其最大值,就是最高金额。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/7c869284c429e72ea83fcda36】。文章转载请联系作者。
评论