题目:
Note: This is an extension of House Robber.
After robbing those houses on that street, the thief has found himself a new place for his thievery so that he will not get too much attention. This time, all houses at this place are arranged in a circle. That means the first house is the neighbor of the last one. Meanwhile, the security system for these houses remain the same as for those in the previous street.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
解析:
这题我一开始是使用C++来做的,所以我就将C++的代码转换为Python了。
这一题其实和House Robber是类似的,只不过这里进行了首尾相连,所以我就计算了两遍,第一次是0到n-2,第二次是1到n-1,因为0和n-1是不能同时取的。
代码:
class Solution:
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
if n == 0:
return 0
if n == 1:
return nums[0]
pre = 0
current = 0
for i in range(0, n-1):
temp = max(pre + nums[i], current)
pre = current
current = temp
max1 = current
pre = 0
current = 0;
for i in range(1, n):
temp = max(pre + nums[i], current)
pre = current
current = temp
max2 = current
return max(max1, max2)