法1:动态规划
看了答案
想法:
- 结果分两种情况讨论:
- 不含最后一个房屋:这样第一个房屋可以被包含。(“可以”,而不是“一定”)
- 不含第一个房屋
- 针对以上两个情况,可分别进行最高金额求解(即LeetCode 198.打家劫舍)。取最大值,即为结果
/**
* @param {number[]} nums
* @return {number}
*/
var rob = function(nums) {
if(nums.length == 1) {
return nums[0];
}
var first = rob2(nums, 0, nums.length - 2),
last = rob2(nums, 1, nums.length - 1);
if(first > last) {
return first;
}
else {
return last;
}
};
function rob2(nums, first, last) {
var i = 0, pre1 = 0, pre2 = 0, cur = 0;
for(i = first; i <= last; i++) {
if(pre1 > (pre2 + nums[i])) {
cur = pre1;
}
else {
cur = (pre2 + nums[i]);
}
pre2 = pre1;
pre1 = cur;
}
return cur;
}