leetcode 089 打家劫舍
题目
一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组 nums
,请计算 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
代码
function rob(nums: number[]): number {
const dp = new Array(nums.length).fill(0);
for (let i = nums.length - 1; i >= 0; i--) {
let result = 0;
if ((dp[i + 2] || 0) + nums[i] > (dp[i + 1] || 0)) {
result += (dp[i + 2] || 0) + nums[i];
} else {
result += (nums[i + 1] || 0);
}
dp[i] = result
}
return dp[0]
}
console.log(rob([0]))
解题思路
根据上图我们可以得出计算公式
(当前位置 + 2)+ 当前位置的数量 > (当前位置+1)的数量 ? (当前位置 + 2)+ 当前位置的数量 : 当前位置+1)的数量
!!! 注意:需要考虑一下边界+2或者+1的时候,有可能超出了原数组的长度。然后直接计算就会得到一个nan