//动态规划,198的升级版
//在于怎样处理 首尾房子,它们之中只能抢一个
//Math(抢首,抢尾)
class Solution {
public int rob(int[] nums) {
//没房子
if(nums.length == 0) return 0;
//一间房子,没得选,必抢
if(nums.length == 1) return nums[0];
//俩间及俩间以上
return Math.max(rob(nums,0,nums.length - 2),rob(nums,1,nums.length - 1));
}
private int rob(int[] nums,int start,int end){
int pre = 0;
int cur = 0;
for(int i = start;i <= end;i++){
//循环开始时, cur 代表 dp[k - 1]; pre 代表 dp[k - 2];
// dp[k] = Math.max(dp[k -1],dp[k-2] + num[i])
int tmp = Math.max(cur,pre + nums[i]);
pre = cur;
cur = tmp;
//循环结束后cur代表dp[k],pre 代表 dp[k - 1];
}
return cur;
}
}