题目:
思路:区别于题198,这道题首尾相接,不可以同时偷第一个和最后一个房子,即选首不选尾,选尾不选首。
分成了两部分,一部分是[1:]另一部分是[:-1]也就是一个不算首,一个不算尾,然后再取两者最大值即可
状态转移方程是:
f(0) = nums[0]
f(1) = max(nums[0], nums[1])
f(i) = max(f(i-1), f(i-2) + nums[i])
程序:
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums: return 0
if len(nums) <= 2: return max(nums)
return max(self.dfs(nums[1:]), self.dfs(nums[:-1]))
def dfs(self, nums):
dp=[]
dp.append(nums[0])
dp.append(max(nums[0], nums[1]))
for i in range(2, len(nums)):
dp.append(max(dp[i-1], dp[i-2] + nums[i]))
return dp[-1]
结果:
2020.7.16——不知道今天做的决定对不对,希望未来的某天不要太难过