LeetCode:337. House Robber III

这一题没有自己做出来。
答案是这样的:
class Solution {
public:
int rob(TreeNode* root) {
auto ret = helper(root);
return max(ret.first, ret.second);
}
private:
pair<int, int> helper(TreeNode* node) {
if (!node)
return make_pair(0, 0);
auto leftRes = helper(node->left);
auto rightRes = helper(node->right);
int v1 = node->val + leftRes.second + rightRes.second;
int v2 = max(leftRes.first, leftRes.second) + max(rightRes.first, rightRes.second);
return make_pair(v1, v2);
}
};
v1是抢这个节点的最大收益
v2是不抢这个节点的最大收益
不能确保下次遇到这个问题一定能够想起来,因为不能说完全理解为什么要这样做,还是先记住吧。
浙公网安备 33010602011771号