//动态规划,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; } }