代码随想录算法训练营第45天 | 198.打家劫舍 、213.打家劫舍II 、337.打家劫舍III
今天就是打家劫舍的一天,这个系列不算难,大家可以一口气拿下。
198.打家劫舍
视频讲解:https://www.bilibili.com/video/BV1Te411N7SX
https://programmercarl.com/0198.打家劫舍.html
/**
* @param {number[]} nums
* @return {number}
*/
var rob = function(nums) {
const dp = new Array(nums.length);
dp[0] = nums[0];
dp[1] = Math.max(nums[0], nums[1]);
for (let i=2;i<nums.length;i++) {
dp[i] = Math.max(dp[i-2]+ nums[i], dp[i-1] );
}
return dp[nums.length-1];
};
213.打家劫舍II
视频讲解:https://www.bilibili.com/video/BV1oM411B7xq
https://programmercarl.com/0213.打家劫舍II.html
在一的基础上变了下
var numsDp = function(nums) {
const dp = new Array(nums.length);
dp[0] = nums[0];
dp[1] = Math.max(nums[0], nums[1]);
for (let i=2;i<nums.length;i++) {
dp[i] = Math.max(dp[i-2]+ nums[i], dp[i-1] );
}
return dp[nums.length-1];
};
/**
* @param {number[]} nums
* @return {number}
*/
var rob = function(nums) {
if (nums.length === 1) return nums[0]
const nums1 = numsDp(nums.slice(0, nums.length - 1));
const nums2 = numsDp(nums.slice(1, nums.length));
return Math.max(nums1, nums2);
};
337.打家劫舍III
视频讲解:https://www.bilibili.com/video/BV1H24y1Q7sY
https://programmercarl.com/0337.打家劫舍III.html
树形dp
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var rob = function(root) {
const backtracing = (node) => {
if (node === null) {
return [0, 0];
}
let leftDp = backtracing(node.left);
let rightDp = backtracing(node.right);
const dp = [];
dp[0] = Math.max(leftDp[1],leftDp[0]) + Math.max(rightDp[1],rightDp[0]);
dp[1] = leftDp[0] + rightDp[0] + node.val;
return dp;
}
const dpRoot = backtracing(root);
return Math.max(dpRoot[0],dpRoot[1]);
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?