198 从前往后递推
def rob(nums):
"""
:type nums: List[int]
:rtype: int
198 递推式:dp[i] = max(dp[i-2]+nums[i],dp[i-1])
"""
if not nums:
return 0
dp =[0 for i in range(len(nums))]
dp[0] = nums[0]
for i in range(1,len(nums)):
if i == 1:
dp[1] = max(nums[0],nums[1])
else:
dp[i] = max((dp[i-2]+nums[i]),dp[i-1])
return dp[len(nums)-1]
213
def rob(nums):
"""
"""
if len(nums) == 0:
return 0
if len(nums) == 1:
return nums[0]
if len(nums) == 2:
return max(nums[0], nums[1])
memo = [-1 for m in range(len(nums))]
memo[0] = nums[0]
memo[1] = max(nums[0], nums[1])
for i in range(2, len(nums) - 1):
memo[i] = max(nums[i] + memo[i - 2], memo[i - 1])
res_1 = memo[-2]
memo = [-1 for m in range(len(nums))]
memo[1] = nums[1]
for i in range(2, len(nums)):
if i == 2:
memo[i] = max(nums[i] + 0, memo[i - 1])
else:
memo[i] = max(nums[i] + memo[i - 2], memo[i - 1])
res_2 = memo[-1]
return max(res_1, res_2)