打家劫舍(首尾相连)Python解法
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                打家劫舍(首尾相连)Python解法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                你是一個專業的小偷,計劃偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都 圍成一圈 ,這意味著第一個房屋和最后一個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警 。
給定一個代表每個房屋存放金額的非負整數數組,計算你 在不觸動警報裝置的情況下 ,今晚能夠偷竊到的最高金額。
來源:力扣(LeetCode)
 鏈接:https://leetcode-cn.com/problems/house-robber-ii
 ?
列:
輸入:nums = [2,3,2] 輸出:3 解釋:你不能先偷竊 1 號房屋(金額 = 2),然后偷竊 3 號房屋(金額 = 2), 因為他們是相鄰的。 class Solution(object):def rob(self, nums):""":type nums: List[int]:rtype: int"""n = len(nums)if n == 0: # 沒有房屋的情況return 0elif n == 1: # 只有一間房屋的情況return nums[0]elif n == 2: # 只有兩間房屋的情況return max(nums[0], nums[1]) # 返回數額更多的那一間# 因為第一家和最后一家收尾相連,所以分兩種情況:搶了第一家就不能搶最后一家# 情況一:不搶第一家dp1 = [0] * n # 賦予初值以便存儲dp1[0], dp1[1] = 0, nums[1] #第一家不搶,打劫第一家的情況設置為0,打劫第二家的情況直接設置為第二家的現金for i in range(2, n): # 從第三家開始遍歷dp1[i] = max(dp1[i-1], nums[i] + dp1[i-2]) # 比較包含前一家的情況和前兩家加當前房屋現金和的情況,取現金數額更高的打劫方法。# 情況二:不搶最后一家,判斷與上面類似dp2 = [0] * ndp2[0], dp2[1] = nums[0], max(nums[0], nums[1])for i in range(2, n-1):dp2[i] = max(dp2[i-1], nums[i] + dp2[i-2])return max(dp1[n-1], dp2[n-2]) # 取兩種情況中較大的那一種情況 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的打家劫舍(首尾相连)Python解法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Win11 Dev 预览版 Build
- 下一篇: 跳跃游戏Python解法
