根据递归思想,找f(n)和f(n-1)的关系
f(n)有两种选择:
最后选了nums[n-1],而没有选择nums[n],相当于,数组中就没有nums[n],就可以直接继承f(n-1)的结果
最后选了nums[n],和num[n-2],而跳过了nums[n-1],相当于,把nums[n-1]在数组中去掉,也就是,取f(n-2),再加上最后的nums[n]
最后结果取最大值:f(n) = max(f(n-1),f(n-2)+n)
class Solution {
public int rob(int[] nums) {
int[] f=new int[nums.length];
if(nums.length==0){return 0;}
else if(nums.length==1){return nums[0];}
else if(nums.length==2){return nums[0]>nums[1]?nums[0]:nums[1];}
else{
f[0]=nums[0];
f[1]=nums[0]>nums[1]?nums[0]:nums[1];
for(int i = 2;i<=nums.length-1;i++){
f[i]=Math.max(f[i-1],f[i-2]+nums[i]);
}
return f[nums.length-1];}
}
}