198.打家劫舍
class Solution(object):def rob(self, nums):""":type nums: List[int]:rtype: int"""if len(nums)==1:return nums[0]if len(nums)==2:return max(nums[0],nums[1])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-2]+nums[i], dp[i-1])return dp[len(nums)-1]
213.打家劫舍II
class Solution(object):def robrange(self, nums):if len(nums)==0:return 0elif 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-2]+nums[i], dp[i-1])return dp[-1]def rob(self, nums):""":type nums: List[int]:rtype: int"""if len(nums)==0:return 0elif len(nums)==1:return nums[0]result1 = self.robrange(nums[:-1])result2 = self.robrange(nums[1:])return max(result1, result2)
337.打家劫舍 III
class Solution(object):def robtree(self, root):if not root:return [0,0]left = self.robtree(root.left)right = self.robtree(root.right)val1 = root.val+left[0]+right[0]val2 = max(left[0],left[1])+max(right[0],right[1])return [val2, val1]def rob(self, root):""":type root: TreeNode:rtype: int"""result = self.robtree(root)return max(result)