思路
遍历的时候,假设当前即为最后一间要偷的房间,当当前为最后一间偷的房间时所获得的最大金额比前一间作为最后偷到的金额还要多,那当前最大金额为当天偷,否则还是偷前一间好
dp[i]代表第i天偷的情况下能获得的最大利润
当len(nums)>2时才会有隔邻偷,所以之前先处理 长度1、2情况
假设:[1,2,3,1]
最后一间为第一个 则能获得最大金额 dp[0]=1
最后一间为第二个 此时,当天能偷的最大金额为2.比前一天偷得还要大(2>1)即 dp[1]=2
最后一间为第三个 此时 可以偷第三间+第一间(偷第一间能获得最大利润为1)=3+1=4>dp[1],所以dp[2]=4
最后一间为第4个,除了偷第四间外,可以偷第二间或第1间(偷不相邻即可) ,1+max(dp[1],dp[0]) =1+2=3<4 ,则dp[3]=4
class Solution(object):def rob(self, nums):""":type nums: List[int]:rtype: int"""if len(nums)==1:return nums[0]if len(nums)==2:return max(nums)dp=[0]*len(nums)dp[0] = nums[0]dp[1]=max(nums[0],nums[1])for i in range(2,len(nums)):j=it = dp[j-2]j-=3while j>=0:t= max(t,dp[j])j-=1t+=nums[i]dp[i] =max(dp[i-1],t)return dp[-1]