public class Solution {
public int Rob(int[] nums) {
//判断为0和为1时的值
if(nums.Length==0) return 0;
if(nums.Length==1) return nums[0];
int R1=robRange(nums,0,nums.Length-2);//不偷第一家的情况
int R2=robRange(nums,1,nums.Length-1);//不偷最后一家的情况
return Math.Max(R1,R2);//比较大小值
}
public int robRange(int[] nums,int start,int end){
//判断数组的开头与结尾的值是否相同 相同就返回开始的值
if(start==end)
return nums[start];
int[] dp=new int[nums.Length+1];
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-2]+nums[i],dp[i-1]);
}
return dp[end];
}
}