LeetCode 198. 打家劫舍(动态规划水题)

博客详细解析了LeetCode 198题的动态规划解法,探讨了一维和二维状态表示的错误想法,并给出了正确的状态计算公式和AC代码。
摘要由CSDN通过智能技术生成

解题思路:

简单题,看出是dp之后一开始想的是一维就能表示。
错误想法:f[i] 表示前 i 个屋子最多偷多少钱,然后想了下方程是前一天可以偷也可以不偷。然后发现f[i]不能确定第i个偷没偷。所以把定义改成前i个屋子最多偷多少钱并且第 i 天偷了。然后一想又不对。可以是前一天偷了,但是如果前一天没偷没法表示。于是这道简单题错误想法出现了两次。

状态表示:
f[i][?] 表示前i天最多能偷多少。?是0表示第 i 天没偷,是1表示偷了。

状态计算:
f[i][0] 前一天可以偷可以不偷。
所以:f[i][0] = max(f[i-1][0], f[i-1][1])

f[i][1] 前一天就不能偷了,只能是前 i - 2 天最多能偷多少,然后加上第 i 天的。
所以:f[i][1] = max(f[i-1][0], f[i-1][1]) + nums[i]
可以看到前面的这部分和f[i][0]一样,所以f[i][1] = f[i][0] + nums[i]

AC代码:

class Solution {
   
    public int rob
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值