龙空技术网

leetcode解题笔记:动态规划——198. 打家劫舍

科技树乱点 146

前言:

现时朋友们对“动态规划解题”都比较注重,大家都想要了解一些“动态规划解题”的相关知识。那么小编同时在网络上网罗了一些关于“动态规划解题””的相关文章,希望大家能喜欢,大家快快来了解一下吧!

题目地址

题目思路和具体解法代码

动态规划解题的一般思路:

确定初始条件;确定状态转移方程;确定边界条件。

初始条件:

只有一个房间,则返回 `nums[0]`;有两个房间,则返回 `Math.max(nums[0], nums[1])`。

房间数量大于2时(k > 2个房间),有2种状态转移选项,可以列出相应的状态转移方程:

偷窃第k间房,偷窃总金额为 `dp[k - 2] + nums[k]`;不偷窃第k间房,偷窃总金额为 `dp[k- 1]`。

所以 `dp[k] = Math.max(dp[k - 2] + nums[k], dp[k - 1])`。

上面内容确定后可以开始写代码了。下面是TypeScript的代码:

function rob(nums: number[]): number {  const dp = []  const n = nums.length  dp[0] = nums[0]  if (n > 1) {    dp[1] = Math.max(nums[0], nums[1])    for (let i = 2; i < n; i++) {      dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1])    }  }  return dp[n - 1]};

标签: #动态规划解题 #动态规划解题全过程 #动态规划解题思路