直接看代码吧
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]; } }