leetcode 213. 打家劫舍 II
与 198. 打家劫舍 相比,多了首和尾不能同时偷的条件
但是没写出来🤡
看了题解,可以比较 不偷首 和 不偷尾 ,哪个大就是最终答案
class Solution {
public:
int rob2(vector<int>& nums,int left,int right){
vector<int> dp(right-left+2);//dp[i]代表直到nums[i]为止能够偷到的最高金额;
dp[left] = nums[left];
if(right-left >= 1){
dp[left+1] = max(nums[left],nums[left+1]);
}
for(int i = left + 2;i <= right;++i){
dp[i] = max(dp[i-2] + nums[i],dp[i-1]);
}
return dp[right];
}
int rob(vector<int>& nums) {
int n = nums.size();
if(n == 1) return nums[0];
if(n == 2) return max(nums[0],nums[1]);
return max(rob2(nums,0,n-2),rob2(nums,1,n-1));
}
};