您的位置:首页 > 其它

213. House Robber II【M】【60】【leetcode】

2016-02-26 15:44 330 查看
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.

Credits:

Special thanks to @Freezen for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

基本思路跟rob1 的思路一样,动态规划,每个点,分为偷和不偷,不一样的就是,成环了

这样以来,可以想象,第一个点和最后一个点不可能同时出现在偷里面,这样就算两次,一个不包括第一个点,一次不包括最后一个点,然后看哪个结果更好

class Solution(object):
def rob(self, nums):
#print nums
res = 0

if not nums:
return 0
if len(nums) == 1:
return nums[0]

steal = [0] * len(nums)
notsteal = [0] * len(nums)
steal[1] = nums[1]

for i in range(1,len(nums)):
#print i,'~'
steal[i] = notsteal[i-1] + nums[i]
notsteal[i] = max(steal[i-1],notsteal[i-1])

res = max(steal[-1],notsteal[-1])

#print res

steal = [0] * len(nums)
notsteal = [0] * len(nums)
steal[0] = nums[0]

#print nums
for i in range(0,len(nums) - 1):
#print i
steal[i] = notsteal[i-1] + nums[i]
notsteal[i] = max(steal[i-1],notsteal[i-1])

res = max(res,steal[-2],notsteal[-2])

return res
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: