1. 程式人生 > >【leetCode】House Robber II python實現

【leetCode】House Robber II python實現

原題連結

實現原理解析

該題在House Robber的基礎上讓首位連結形成環,那麼即表示第一個和最後一個不能同時被搶,則問題分解為House Robber(nums[0:len(nums)-1])和House Robber(nums[1:len(nums)]),兩者中比較大的那個即為結果

python程式碼實現

class Solution(object):
    def rob(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        length = len(nums)
        if
length == 0: return 0 elif length == 1: return nums[0] elif length ==2: return max(nums[0], nums[1]) return max(self.dfs(nums[1:]), self.dfs(nums[:-1])) def dfs(self, nums): if len(nums) == 2: return max(nums[0], nums[1
]) res = [0 for each in nums] res[0] = nums[0] res[1] = max(nums[0], nums[1]) for index in xrange(2,len(nums)): res[index] = max(res[index -2] + nums[index], res[index - 1]) return res[len(nums) - 1]