House Robber II

Problem Link: https://leetcode.com/problems/house-robber-ii/

class Solution:
    def rob(self, nums: List[int]) -> int:
        
        def fun(nums):
            n=len(nums)
            dp=[0]*(n)
            dp[0]=nums[0]
            if(n==0):
                return nums[0]
            dp[1]=max(nums[0],nums[1])
            if(n==1):
                return nums[1]
            for i in range(2,n):
                inc=nums[i]+dp[i-2]
                exc=dp[i-1]
                dp[i]=max(inc,exc)
            return dp[n-1]
        
        
        n=len(nums)
        if(n==1):
            return nums[0]
        elif(n==2):
            return max(nums[0],nums[1])
        else:
            # Think why?
            return max(fun(nums[1:]),fun(nums[:n-1]))

Last updated