您的位置:首页 > 其它

leetcode -- House Robber II -- 重点dp

2015-12-10 17:32 302 查看
https://leetcode.com/problems/house-robber-ii/

注意思路:对于第一个house, 判断其“rob” or “not rob”. if rob, 那么结果就是nums[0] + rob_linear(nums[2:i-1]); if not rob, 结果就是 rob_linear(nums[1:i])

参考:

http://bookshadow.com/weblog/2015/05/20/leetcode-house-robber-ii/ 还有更好的方法

my code:

class Solution(object):

def rob_linear(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 0:
return 0
d = [0] * (len(nums) + 1)
d[1] = nums[0]
for i in xrange(2, len(nums) + 1):
d[i] = max(d[i - 2] + nums[i - 1], d[i - 1])
return d[len(nums)]

def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
if n == 0: return 0
#写下初始情况各个值对应的结果,便于分析理解
#if n == 1: d[1] = nums[0]
#if n == 2: d[2] = max(nums)
#if n == 3: d[3] = max(nums[0], self.rob_linear(nums[1:]))

return max(nums[0] + self.rob_linear(nums[2:n-1]) , self.rob_linear(nums[1:]))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: