思路
啊啊啊我一开始思路是对的!!就是分情况讨论,选了头就不选尾,选了尾巴就不选头。。但我没想到抽象!以为要写两遍就傻不愣登 去把 头和尾判断大小然后设0了。我晕= =
重复代码抽象出来呀
var rob = function(nums) {
if(nums.length===0) return 0
if(nums.length===1) return nums[0]
const result1 =robRange(nums,0,nums.length-1)
const result2 =robRange(nums,1,nums.length)
return Math.max(result1,result2)
};
const robRange =function(nums,start,end){
if(start===end) return nums[start]
let dp =new Array(end).fill(0)
dp[start] =nums[start]
dp[start+1] =Math.max(nums[start],nums[start+1])
for(let i=start+2;i<end;i++){
dp[i] =Math.max(dp[i-2]+nums[i],dp[i-1])
}
return dp[end-1]
}