213. 打家劫舍 II
题目链接 | 213. 打家劫舍 II |
---|---|
思路 | 动态规划-打家劫舍-简单变体 |
题解链接 | 简洁写法!直接调用 198 题代码!(Python/Java/C++/Go/JS/Rust) |
关键点 | 可以分为两种情况讨论:1. 选第一个位置 2. 不选第一个位置 |
时间复杂度 | \(O(n)\) |
空间复杂度 | \(O(1)\) |
代码实现:
class Solution:
def simple_rob(self, nums):
f0 = f1 = 0
for x in nums:
f0, f1 = f1, max(f1, f0+x)
return f1
def rob(self, nums: List[int]) -> int:
return max(
nums[0] + self.simple_rob(nums[2:-1]),
self.simple_rob(nums[1:])
)