参考windliang的分析:https://leetcode.wang/leetcode-198-House-Robber.html
dp[n]表示前n家能够带来的最大收益。已知dp[n-2],dp[n-1],第n家有两种可能:偷,不偷。
若偷,前n家能够偷到的最大收益等于dp[n-2]+nums[n],因为偷第n家,就不能偷第n-1家了。
若不偷,前n家最多偷到的钱等于前n-1家最多偷到的钱dp[n-1]。
最终dp[n]=Math.max((dp[n-2]+nums[n]),dp[n-1]);
import java.lang.Math;
class Solution {
public int rob(int[] nums) {
if(nums==null||nums.length==0){//注意nums为空,或者只有一个的情况
return 0;
}
if(nums.length==1){
return nums[0];
}
int []dp=new int[nums.length];
dp[0]=nums[0];
dp[1]=Math.max(nums[0],nums[1]);
for(int i=2;i<nums.length;i++){
dp[i]=Math.max(dp[i-1],(dp[i-2]+nums[i]));
}
return dp[nums.length-1];
}
}