大佬的解题思路:
https://leetcode-cn.com/problems/house-robber/solution/da-jia-jie-she-dong-tai-gui-hua-jie-gou-hua-si-lu-/
简洁的代码
class Solution {
public int rob(int[] nums) {
int pre = 0, cur = 0, tmp;
for(int num : nums) {
tmp = cur;
cur = Math.max(pre + num, cur);
pre = tmp;
}
return cur;
}
}
我的纷乱代码
//执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户
//内存消耗:35.9 MB, 在所有 Java 提交中击败了32.78% 的用户
public static int rob(int[] nums) {
if(nums == null || nums.length < 1) return 0;
int n = nums.length;
int[] dp = new int[n];
Arrays.fill(dp, Integer.MIN_VALUE);
pro(nums,n,0,dp);
return Math.max(dp[0],0);
}
public static int pro(int[] a,int n,int index,int[] dp){
if(index >= n) return 0;
if(dp[index] != Integer.MIN_VALUE) return dp[index];
if(index == n - 2){
int p1 = a[index];
int p2 = pro(a,n,index+1,dp);
dp[index] = Math.max(p1,p2);
return dp[index];
}
if(index == n - 1){
dp[index] = Math.max(a[index],0);
return dp[index];
}
// 选了
int p1 = a[index] + pro(a,n,index+2,dp); //可以自由选的情况下,把index+1这个一定不能选的去除
// 没选
int p2 = pro(a,n,index+1,dp);
dp[index] = Math.max(p1,p2);
return dp[index];
}
可能这就是差距吧。