House Robber II
Problem: House Robber II
My solution is to do dynamic programming twice, one for robbing the first house and the other one not.
Code in Python:
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums: return 0
if len(nums) == 1: return nums[0]
if len(nums) == 2: return max(nums)
return max(self.dp(nums[1:]), self.dp(nums[2:len(nums)-1])+nums[0])
def dp(self, nums):
if not nums: return 0
if len(nums) == 1: return nums[0]
ans = [nums[0], max(nums[0], nums[1])]
for i in xrange(2, len(nums)):
ans.append(max(ans[i-1], ans[i-2]+nums[i]))
return ans[-1]