0213: House Robber II

class Solution:
    def rob(self, nums):
        N = len(nums)
        
        @cache
        def rec(sx, ex):
            if sx >= ex:
                return 0
            takeit = nums[sx] + rec(sx + 2, ex)
            skipit = rec(sx + 1, ex)
            return max(takeit, skipit)
        
        return max(rec(0, N - 1), rec(1, N)) if N > 1 else nums[0]