戦利品の問題を達成するためのpython3
オリジナルタイトルhttps://leetcode-cn.com/problems/house-robber/
あなたは、家の通りの計画を盗むためにプロの泥棒です。同じ夜上の2つの隣接する家は、泥棒がシステムに侵入した場合の各部屋にはいくつかの現金を所持している、影響を与える唯一の制約は、相互に通信し、あなたの隣人の家は、盗難防止システムが装備されて盗む自動的に警報。
もし警報装置に触れていない場合に算出ハウジングストレージ量の各非負整数のアレイからの代表与え、に最大量を盗むことができます。
例1:
输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。
例2:
输入: [2,7,9,3,1]
输出: 12
解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
偷窃到的最高金额 = 2 + 9 + 1 = 12 。
問題解決:
class Solution:
def rob(self, nums: List[int]) -> int:
n = len(nums)
if n == 0:
return 0
if n == 1:
return nums[0]
if n == 2:
return max(nums[0], nums[1])
e0 = 0
e1 = nums[0]
e2 = max(nums[0], nums[1]) #动态规划思路,但是只需要3个中间值
for i in range(3, n + 1):
e0, e1, e2 = e1, e2, max(nums[i-1] + e1, nums[i-2] + e0)
return e2