这题的分类是动态规划。目前还不是很懂这种算法。做起来非常吃力(基本寸步难行)。这题一开始可以看到一个简单的想法是1 + 3以后的和2 + 4以后的取最大值的递归。然而超时了。。。再接着想方法。最后是利用2分的性质,在中间取一个数进行拆分来简化时间。代码如下:
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 0:
return 0
if len(nums) == 1:
return nums[0]
if len(nums) == 2:
return max(nums[0], nums[1])
else:
middle = len(nums) / 2
a = self.rob(nums[:middle]) + self.rob(nums[middle + 1:])
b = self.rob(nums[:middle - 1]) + self.rob(nums[middle:])
if a >= b:
return a
else:
return b