213. House Robber II
首尾相接 array,根据不同目的,考虑两种处理方式:
直接loop两遍
根据首位n项的选择与否来分情况解决
这道就是2,把 Q198 稍微改动一下就好了。两个情况是:取了首项不取尾项,取了尾项不取首项。
198. House Robberclass Solution:
def subMax(self, sub, dp):
n = len(sub)
if n == 0: dp[0] = 0
elif n <= 2: dp[n] = max(sub)
if n in dp: return dp[n]
curMax = max(self.subMax(sub[:n-2], dp)+sub[n-1], self.subMax(sub[:n-1], dp))
dp[n] = curMax
return curMax
def rob(self, nums: List[int]) -> int:
if not nums: return 0
if len(nums) <= 2: return max(nums)
dp1, dp2 = dict(), dict()
return max(self.subMax(nums[:len(nums)-1], dp1), self.subMax(nums[1:], dp2))
Last updated
Was this helpful?