House Robber

Problem: House Robber

This dynamic programming solution assume that we know the max value we can rob for n-1 houses and for n-2 houses, thus max value for n houses is either former one or latter one plus last house. To justify that, we can first assume we can rob the last house, then seems adding former n-2 houses seems fair to avoid alerting. If we don't rob the last house, the max value may be bigger than former n-1 houses only when max value for n-1 houses equals n-2 houses.

Code in Python:

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]
        dp = [nums[0], max(nums[0], nums[1])]
        for i in xrange(2, len(nums)):
            dp.append(max(dp[i-1], dp[i-2] + nums[i]))
        return dp[-1]

results matching ""

    No results matching ""