打家劫舍1(力扣198)(房屋不成环):dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
int[] dp = new int[nums.length];
dp[0] = nums[0];
dp[1] = Math.max(nums[0], nums[1]);;
for(int i = 2; i < dp.length; i++){
dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
}
打家劫舍2(力扣213)(房屋成环):dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
/*
将环分为 0 到 n-1 和 1 到 n,返回最大值。。值的求法和打家劫舍1一样。
*/
打家劫舍3(力扣337)(房屋呈二叉树):后续遍历
public int rob(TreeNode root) {
int[] ans = postOrder(root);
return Math.max(ans[0],ans[1]);
}
public int[] postOrder(TreeNode root){
if(root == null){
return new int[]{0,0};
}
int[] left = postOrder(root.left);
int[] right = postOrder(root.right);
int v1 = left[0]+right[0];
int v2 = left[1] + right[1] + root.val;
v2 = Math.max(v2,v1);
return new int[]{v2,v1};
}