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]

results matching ""

    No results matching ""