213. 打家劫舍 II

直接看代码吧
class Solution {//和上一个打家劫舍差不多,唯一的区别是第一个和最后一个房子不能同时抢,所以比较[1,n-1]个房子的最大值,与[2,n]个房子的最大值
public int rob(int[] nums) {//copyOfRange函数易忘,闭区间拷贝出一个新的数组
if(nums.length==0) return 0;
if(nums.length==1) return nums[0];
return Math.max(getrob(Arrays.copyOfRange(nums,0,nums.length-1)),getrob(Arrays.copyOfRange(nums,1,nums.length)));
}
public int getrob(int[] nums)
{
if(nums.length==0)return 0;
if(nums.length==1) return nums[0];
if(nums.length==2) return nums[0]>nums[1]?nums[0]:nums[1];
int []s=new int[nums.length];
s[0]=nums[0];
s[1]=nums[0]>nums[1]?nums[0]:nums[1];
for(int i=2;i<nums.length;i++)
{
s[i]=Math.max(s[i-1],s[i-2]+nums[i]);//这里容易写错,+nums[i]
}
return s[nums.length-1];
}
}

浙公网安备 33010602011771号