213. 打家劫舍 II

image.png

代码

  1. class Solution {
  2. /**
  3. 分三种情况
  4. 1:头尾均不选
  5. 2: 考虑含头不含尾的情况
  6. 3:考虑含尾不含头的情况(2,3包括1)
  7. */
  8. public int rob(int[] nums) {
  9. int size = nums.length;
  10. if( size < 2 ) {
  11. return nums[0];
  12. }
  13. return Math.max( robMax(Arrays.copyOfRange(nums,0,size - 1)) , robMax(Arrays.copyOfRange(nums,1,size) ) );
  14. }
  15. public int robMax(int[] nums ) {
  16. int size = nums.length;
  17. if(size < 2) return nums[0];
  18. int [] dp = new int [size];
  19. dp[0] = nums[0];
  20. dp[1] = Math.max(nums[0],nums[1]);
  21. for(int i = 2; i < size; i++ ) {
  22. dp[i] = Math.max(dp[i - 2] + nums[i],dp[i - 1]);
  23. }
  24. return dp[size - 1];
  25. }
  26. }