python3 动态规划
沿街偷东西的问题,不能相邻两个不能偷
【21,3,4,5,7,2,7,9,1】
问题分解转化为小颗粒
判断:
每次找都要找到最大的值,需要判断,隔一个加起来的值,和相邻的值那个大,然后偷大的
class Solution:
def rob(self , nums: List[int]) -> int:
#dp[i]表示长度为i的数组,最多能偷取多少钱
dp = [0 for i in range(len(nums) + 1)]
#长度为1只能偷第一家
dp[1] = nums[0]
for i in range(2, len(nums) + 1):
#对于每家可以选择偷或者不偷
dp[i] = max(dp[i - 1], nums[i - 1] + dp[i - 2])
return dp[len(nums)]