198. House Robber

Question: House Robber

Solution

想法:

現在搶奪金額,會是前兩家 i - 2或是前三家 i - 3,選大的 max(nums[i - 2], nums[i - 3]),加上現在房子裡的金額 nums[i]

要搶奪最多錢錢,就是挑當前搶完最多的,當前搶完最多的,會跟前兩家、前三家搶奪最多的有關

class Solution:
def rob(self, nums: list[int]) -> int:
if len(nums) == 1:
return nums[0]
elif len(nums) == 2:
return max(nums[0], nums[1])

pre1, pre2 = 0, nums[0]
for i in range(2, len(nums)):
nums[i] += max(pre1, pre2) # 前兩家、前三家
pre1, pre2 = nums[i - 2], nums[i - 1]
return max(nums[-1], nums[-2])
改寫比較漂亮

class Solution:
def rob(self, nums: list[int]) -> int:
rob1, rob2 = 0, 0
for n in nums:
rob1 , rob2 = rob2, max(rob1 + n, rob2)
return max(rob1, rob2)

Comments

Popular Posts