package
0.0.0-20241125063422-a7e1e0bf04b0
Repository: https://github.com/blueblue0102/leetcode-go.git
Documentation: pkg.go.dev

# README

213. House Robber II

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

給定的 nums 是一個環,nums[0]nums[n-1], n = len(nums) 是相連的
要找出能搶的最大金額,且當下的選擇會影響未來的選擇,所以是一個 DP problem

解題思維和 198. House Robber 一樣
只是差別在於要解決 base case 如何設計的問題
當選擇了 nums[0] 就意味不能選擇 nums[n-1],除了頭尾的部分需特別考量,其餘部分都是一樣的

所以分成兩種 case,選擇或不選擇 nums[0]
選擇 nums[0] 即表示 nums[1]nums[n-1] 都必定不會被選擇
所以可以當作在計算 num[2:n-1]
不選擇 nums[0] 即表示計算 nums[1:]
最後比較 nums[0]+dp(nums[2:n-1])dp(nums[1:]) 即可

Takeaway

  • Dynamic Programming