题目描述:https://leetcode.com/problems/house-robber-ii/
在House Robber的基础上进行考虑,如果打劫第0间,就不能打劫第n间,相当于求解[0,n-1]的最大值;如果打劫第n间,就只能从第1间开始打劫,相当于求解[1,n]的最大值,最后比较这两个值哪个大即可。
class Solution {
public:
int rob(vector<int>& nums) {
if (nums.size()==0) return 0;
if (nums.size()==1) return nums[0];
if (nums.size()==2) return max(nums[0],nums[1]);
return max(robber(nums,0,nums.size()-2),robber(nums,1,nums.size()-1));
}
int robber(vector<int>& nums,int i,int j){
int a=nums[i];
int b=max(nums[i],nums[i+1]);
for (int k=i+2;k<=j;k++)
{
int tmp=max(a+nums[k],b);
a=b;
b=tmp;
}
return b;
}
};