Leetcode # 213. House Robber II
https://leetcode.com/problems/house-robber-ii
Solution
_rob() | := | 必定搶最後一間的收益 |
結果 | := | max(搶最後一間, 不搶最後一間) |
= | max(搶最後一間 and 不搶第一間, 不搶最後一間) | |
= | max(_rob(nums[1:]), robs(nums[:-1])) |
Time Complexity: O(len(nums))
Space Complexity: O(1)
(The input and output generally do not count towards the space complexity.)
class Solution: def rob(self, nums: List[int]) -> int: if len(nums) < 2: return sum(nums) def _rob(start, end): DP = [0, nums[start]] # don't rob or rob for num in nums[start + 1:end + 1]: DP = [DP[1], max(num + DP[0], DP[1])] return DP[1] return max( _rob(1, len(nums) - 1), # rob last house _rob(0, len(nums) - 2) # don't rob last house )
Last Updated on 2023/08/16 by A1go