198. 打家劫舍 - 力扣(LeetCode)
class Solution {
public:int rob(vector<int>& nums) {if(nums.size()==1) return nums[0];vector<int>dp(nums.size()+1,0);dp[0]=nums[0];dp[1]=max (nums[1],nums[0]);for(int i=2;i<nums.size();i++){dp[i]=max(dp[i-2]+nums[i],dp[i-1]);}return dp[nums.size()-1];}
};
213. 打家劫舍 II - 力扣(LeetCode)
class Solution {
public:int rob(vector<int>& nums) {if(nums.size()==1) return nums[0];int result1=robRange(nums,1,nums.size()-1);int result2=robRange(nums,0,nums.size()-2);return max(result1,result2);}int robRange(vector<int>& nums,int start , int end){if(start==end) return nums[start];vector<int>dp(nums.size(),0);dp[start]=nums[start];dp[start+1]=max(nums[start],nums[start+1]);for(int i=start+2;i <=end ;i++){dp[i]=max(dp[i-2]+nums[i],dp[i-1]);}return dp[end];}
};
337. 打家劫舍 III - 力扣(LeetCode)
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int rob(TreeNode* root) {vector<int>result = robTree(root);return max(result[0],result[1]);}vector<int>robTree(TreeNode* cur){if(cur==nullptr) return vector<int>{0,0};vector<int>left=robTree(cur->left);vector<int>right=robTree(cur->right);int val1=cur->val+left[0]+right[0];int val2=max(left[0],left[1])+max(right[0],right[1]);return {val2,val1};}
};
关于二叉树的遍历有点忘了,需要复习。