198. 打家劫舍 - 力扣(Leetcode)
class Solution {
public:
int rob(vector<int>& nums) {
vector<int> dp(nums.size() + 1, 0);
dp[0] = 0;
dp[1] = nums[0];
for(int i = 2; i < dp.size(); i++) {
dp[i] = max(dp[i - 2] + nums[i - 1], dp[i - 1]);
}
return dp.back();
}
};
213. 打家劫舍 II - 力扣(Leetcode)
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.size() == 1) return nums[0];
vector<int> dp(nums.size(), 0);
dp[0] = 0;
dp[1] = nums[0];
for(int i = 2; i < dp.size(); i++) {
dp[i] = max(dp[i - 1], dp[i - 2] + nums[i - 1]);
}
int temp = dp.back();
dp[1] = nums[1];
for(int i = 2; i < dp.size(); i++) {
dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]);
}
return max(temp, dp.back());
}
};
337. 打家劫舍 III - 力扣(Leetcode)
class Solution {
public:
int rob(TreeNode* root) {
vector<int> temp = robTree(root);
return max(temp[0], temp[1]);
}
vector<int> robTree(TreeNode *node) {
if(node == nullptr) return vector<int>{0, 0};
vector<int> l = robTree(node->left);
vector<int> r = robTree(node->right);
return vector<int>{l[1] + r[1] + node->val, max(l[0], l[1]) + max(r[0], r[1])};
}
};