class Solution:
def rob(self, nums: List[int]) -> int:
if not nums:
return 0
n = len(nums)
memo = [-1 for i in range(n)]
memo[n - 1] = nums[n - 1]
for i in range(n-2, -1, -1):
for j in range(i, n):
memo[i] = max(nums[j] + (memo[j+2] if j+2 < n else 0), memo[i])
return max(memo)
memo数组每一位代表偷当前房屋之后所能收获的最大价值。除末位之外初始值为-1,代表没考虑该房屋。从倒数第二间房屋开始偷,每次偷到最后一间房,期间遍历过程为比较当前memo数组中的价值和加上这间房(以及往右数的第二间房屋,如果没有越界)的价值之后所能达到的收益多少