代码随想录算法训练营Day 47|动态规划part09|198.打家劫舍、213.打家劫舍II 、337.打家劫舍III
198.打家劫舍
题目链接
一、法一
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
dp=[0]*len(nums)
if len(nums)==0:
return 0
if len(nums)==1:
return nums[0]
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[len(nums)-1]
213.打家劫舍II
题目链接
一、法一
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 0:
return 0
if len(nums) == 1:
return nums[0]
result1=self.rob_1(nums[0:len(nums)-1])
result2=self.rob_1(nums[1:len(nums)])
return max(result1,result2)
def rob_1(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
dp=[0]*len(nums)
if len(nums)==0:
return 0
if len(nums)==1:
return nums[0]
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[len(nums)-1]
337.打家劫舍III
题目链接
一、法一
class Solution(object):
def rob(self, root):
"""
:type root: TreeNode
:rtype: int
"""
dp=self.tranveral(root)
return max(dp[0],dp[1])
def tranveral(self,node):
if not node:
return [0,0]
leftdp=self.tranveral(node.left)
rightdp=self.tranveral(node.right)
val1=node.val+leftdp[0]+rightdp[0]
val0=max(leftdp[1],leftdp[0])+max(rightdp[0],rightdp[1])
return [val0,val1]