![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
Lc_summer
这个作者很懒,什么都没留下…
展开
-
拆分数字(数论 + dp)
数学方法2+2+2 = 3+3 但是 2 * 2 * 2 < 3 * 3的那么所有的数应该尽可能的分成3的和然后剩下的分成2,如果只剩下1,就少用一个3变成4,如果剩下一个2那就将3的累积乘以2,剩下0就直接返回3的累积就可以了class Solution {public: int integerBreak(int n) { if(n == 2) return 1; if(n == 3) return 2;原创 2021-03-11 16:31:44 · 385 阅读 · 0 评论 -
不同路径(无障碍)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:图片输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右向下 -> 向右 -&g原创 2021-03-11 16:31:30 · 110 阅读 · 0 评论 -
不同路径(有障碍)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径:原创 2021-03-11 16:31:13 · 422 阅读 · 0 评论 -
使用最小花费爬楼梯
746. 使用最小花费爬楼梯数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例 1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。示例 2:原创 2021-03-11 16:30:55 · 133 阅读 · 0 评论 -
爬楼梯问题(递归 + dp)
70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入:2输出:2解释:有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入:3输出:3解释:有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶递归三部曲参数和返回值:输入楼层n 返回有多少中爬楼梯的方法单层递归逻辑:当前楼层的爬楼方法数 = 前一阶 +原创 2021-03-11 16:30:37 · 280 阅读 · 0 评论 -
斐波那契数列(递归 + dp)
509. 斐波那契数斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你n ,请计算 F(n) 。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1示例 2:输入:3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2示原创 2021-03-11 16:30:20 · 546 阅读 · 0 评论