题目链接
这题和打家劫舍I 的不同点就是成环 头结点偷了尾节点就不能偷,尾节点偷了头结点就不能偷。
所以我们需要分段考虑
第一段是0~len-2
第二段是1~len-1
public int rob(int[] nums) {
if (nums.length == 1) return nums[0];
if (nums.length == 2) return Math.max(nums[0],nums[1]);
int res = robRange(nums,0,nums.length-2);
int res2 = robRange(nums,1,nums.length-1);
return res>res2 ? res:res2;
}
public int robRange(int nums[],int start,int end){
int dp[] = new int[nums.length];
dp[start] = nums[start];
dp[start+1] = Math.max(nums[start],nums[start+1]);
for (int i = start+2; i <= end; i++) {
dp[i] = Math.max(dp[i-1],dp[i-2]+nums[i]);
}
return dp[end];
}