class Solution:
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# 将第一家和最后一家分别去掉,用动态规划求出两个最大值,然后较大的那个就是
n = len(nums)
if n == 0:
return 0
elif n <= 3:
return max(nums)
# 状态转移方程
pre = nums[0]
cur = max(nums[0], nums[1])
for x in nums[2:n - 1]: # 去掉最后一个数
cur, pre = max(pre + x, cur), cur
_max = cur
pre = nums[1]
cur = max(nums[1], nums[2])
for x in nums[3:]: # 去掉第一个数
cur, pre = max(pre + x, cur), cur
_max = max(_max, cur)
return _max