![](https://img-blog.csdnimg.cn/2e6a76606c804b278e27847fbab6c31e.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
代码随想录
跟着卡哥一起刷题,在此记录,学习链接https://programmercarl.com/
ClimberCoding
基础不牢,地动山摇…
展开
-
LeetCode 096、不同的二叉搜索树
LeetCode 096、不同的二叉搜索树 题目 题解 思路 dp[3] 就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量 元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个搜索树的数量 元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个搜索树的数量 元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个搜索树的数量 另外, 有0个元素的搜索树数量就是dp[0] 有1个元素原创 2021-11-12 00:04:48 · 219 阅读 · 0 评论 -
LeetCode 343、整数拆分
LeetCode 343、整数拆分 题目 题解 解法1 确定dp数组以及下标的含义 dp[i]:拆分 i ,可以得到的最大乘积为dp[i] 确定递推公式 可以从1开始遍历j,有两种渠道获得dp[i]:一种直接j * (i - j) ;另一种是 j * dp[i - j],相当于拆分了dp[i - j](j在从1开始的过程中其实已经拆分了)。 可以得到递推公式:dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j])); dp的初始值 在这里原创 2021-11-12 00:03:43 · 219 阅读 · 0 评论 -
LeetCode 063、不同路径 II
LeetCode 063、不同路径 II 题目 题解 五部曲分析问题,注意递推公式: dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; (i, j)如果是障碍的话就应该保持初始状态0 class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int row = obstacleGrid.si原创 2021-11-10 22:23:22 · 4244 阅读 · 0 评论 -
LeetCode 062、不同路径
LeetCode 062、不同路径 题目 题解 按照动态规划五部曲来分析。 class Solution { public: int uniquePaths(int m, int n) { if (m < 0 || n < 0) return 0; vector<vector<int>> dp(m, vector<int>(n)); for (int i = 0; i < m; ++i)原创 2021-11-10 22:22:49 · 189 阅读 · 0 评论 -
LeetCode 746、使用最小花费爬楼梯
LeetCode 746、使用最小花费爬楼梯 题目 题解 很显然这是一道动态规划题目,按照动态规划五步走: 确定dp数组以及下标的含义 dp[i] :到达第 i 个台阶所花费的最少体力 确定递推公式 dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i]; dp数组如何初始化 dp[0] = cost[0]; dp[1] = cost[1]; 确定遍历顺序 很显然是从前到后遍历cost数组 举例推导dp数组 … … class原创 2021-11-10 22:21:31 · 53 阅读 · 0 评论 -
LeetCode 070、爬楼梯
LeetCode 070、爬楼梯 题目 题解 先分析题目,爬到第一层有一种方法,爬到第二层有两种方法。爬到第三层时,可以选择爬一层再跨两步,也可以选择爬两层再跨一步就到。 即到达第三层是由第一层和第二层楼梯状态所推导出来的——> 动态规划 分析一下动态规划五部曲: 确定dp数组以及下标的含义 dp[i]:爬到第i层楼梯,有dp[i] 种方法 确定递推公式 dp[i] = dp[i - 1] + dp[i - 2] ,在推导dp[i] 时一定要时刻想着dp[i] 的定义,否则容易跑偏。原创 2021-11-10 22:21:04 · 105 阅读 · 0 评论 -
LeetCode 509、斐波那契数列
LeetCode 509、斐波那契数列 题目 题解 按照动态规划五步走: 确定 dp数组 以及下标的含义: dp[i] 表示第 i 个斐波那契数的值 确定递推公式: 题目中已给出:dp[i] = dp[i - 2] + dp[i - 1] dp数组 如何初始化: dp[0] = 0; dp[1] = 1; 确定遍历顺序: dp[i] 依赖于 dp[i - 1] 和 dp[i -2],因此遍历顺序从前到后 举例推导dp数组 按照上面的递推公式,当N为10时,dp数组为:原创 2021-11-10 14:04:21 · 59 阅读 · 0 评论 -
动态规划理论基础
学习链接 动态规划理论基础 1、什么是动态规划 动态规划简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 动态规划中的每个状态都是由上一个状态推导出来的,而贪心没有状态推导,直接从局部选择最优。 例如:有N件物品和一个承重量为W的背包。第 i 件物品的重量是 weight[i],价值为 value[i]。问将哪些物品装入背包中能使得物品价值总和最大? 动态规划中 dp[j] 是由 dp[j - weight[i]] 推导出来的,然后取 max(dp[j], dp[j - weight[i]原创 2021-11-10 14:03:45 · 290 阅读 · 0 评论