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];
    }
}

  

原文地址:https://www.cnblogs.com/lzh1043060917/p/12970250.html