198.打家劫舍
leetcode 198.打家劫舍
代码随想录
class Solution:
def rob(self, nums: List[int]) -> int:
if len(nums) == 0:
return 0
if len(nums) == 1:
return nums[0]
dp = [0] * len(nums)
dp[0] = nums[0]
dp[1] = max(nums[0], nums[1])
for i in range(2, len(nums)):
dp[i] = max(dp[i-1], dp[i-2] + nums[i])
return dp[-1]
213.打家劫舍II
leetcode 213.打家劫舍II
代码随想录
class Solution:
def func(self, nums):
if len(nums) == 1:
return nums[0]
dp = [0] * len(nums)
dp[0] = nums[0]
dp[1] = max(nums[0], nums[1])
for i in range(2,len(nums)):
dp[i] = max(dp[i-1], dp[i-2] + nums[i])
return dp[-1]
def rob(self, nums: List[int]) -> int:
if len(nums) == 1:
return nums[0]
result1 = self.func(nums[:-1])
result2 = self.func(nums[1:])
return max(result1, result2)
337.打家劫舍 III
leetcode 337.打家劫舍 III
代码随想录
class Solution:
def rob(self, root: Optional[TreeNode]) -> int:
dp = self.traverse(root)
return max(dp[0], dp[1])
def traverse(self, root):
if not root:
return (0,0)
left = self.traverse(root.left)
right = self.traverse(root.right)
val0 = root.val + left[1] + right[1]
val1 = max(left[0], left[1]) + max(right[0], right[1])
return (val0, val1)