【Leetcode】python - [198] House Robber 個人解法筆記

題目出處

198. House Robber

難度

Medium

個人範例程式碼

class Solution:
    def rob(self, nums: List[int]) -> int:
        if not nums:
            return 0

        dp = []
        for i in range(len(nums)):
            if i == 0:
                dp.append(nums[0])
            elif i == 1:
                dp.append(max(nums[0], nums[1]))
            else:
                dp.append(max(dp[i-1], dp[i-2] + nums[i]))

        # print(dp)
        return dp[-1]

最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解

算法說明

算是陽春的 DP 問題,

  • 主要目標:dp[i] = max(dp[i-2]+A[i], dp[i-1])
  • 初始目標:
    • dp[0] = A[0]
    • dp[1] = max(A[0], A[1])
  • input handling

    處理 input 沒有房子與 input 只有一棟房子的情況

    • 沒有房子,return 0
    • 只有一棟房子,return 那一棟房子

    Boundary conditions

    for 來控制範圍

    Reference