【力扣198-打家劫舍】動態規劃(python3)

Alwaysion發表於2020-12-05

題目描述

https://leetcode-cn.com/problems/house-robber/

思路題解

用動態規劃的思想,把問題簡單化:

  • 若當前有0間房屋:ans=0
  • 若當前有1間房屋:ans=這1間房屋的金額
  • 若當前有2間房屋:ans=這2間房屋的金額的最大值
  • 若當前有3間房屋:ans=第2間和第1+3間的最大值
  • 若當前有n(n>3)間房屋:ans=選k(第k間+前k-2間之和的金額)和不選k(前k-1間的金額)的最大值

程式碼如下:

class Solution:
    def rob(self, nums: List[int]) -> int:
        length=len(nums)
        if length<=3:
            if length==0:return 0
            if length==1:return nums[0]
            if length==2:return max(nums[0],nums[1])
            if length==3:return max(nums[1],nums[0]+nums[2])
        dp={}
        dp[0]=nums[0]
        dp[1]=max(nums[0],nums[1])
        dp[2]=max(nums[1],nums[0]+nums[2])
        for i in range(3,length):
            dp[i]=max(nums[i]+dp[i-2],dp[i-1])
        return dp[length-1]

在這裡插入圖片描述

相關文章