image.png

思路

啊啊啊我一开始思路是对的!!就是分情况讨论,选了头就不选尾,选了尾巴就不选头。。但我没想到抽象!以为要写两遍就傻不愣登 去把 头和尾判断大小然后设0了。我晕= =
重复代码抽象出来呀

  1. var rob = function(nums) {
  2. if(nums.length===0) return 0
  3. if(nums.length===1) return nums[0]
  4. const result1 =robRange(nums,0,nums.length-1)
  5. const result2 =robRange(nums,1,nums.length)
  6. return Math.max(result1,result2)
  7. };
  8. const robRange =function(nums,start,end){
  9. if(start===end) return nums[start]
  10. let dp =new Array(end).fill(0)
  11. dp[start] =nums[start]
  12. dp[start+1] =Math.max(nums[start],nums[start+1])
  13. for(let i=start+2;i<end;i++){
  14. dp[i] =Math.max(dp[i-2]+nums[i],dp[i-1])
  15. }
  16. return dp[end-1]
  17. }