动态规划问题
LeetCode的动态规划刷题记录
尘埃飞舞
凡心所向,素履以往;
生如逆旅,一苇以航。
展开
-
LeetCode-动态规划-213. 打家劫舍 II
213. 打家劫舍 II思路:考虑三种情况注释代码中class Solution {public: int rob(vector<int>& nums) { if(nums.empty()) return 0; if(nums.size()==1) return nums[0]; //考虑首端,不考虑尾端 int value1 = robrange(nums,0,nums.size()-2);原创 2021-10-12 22:57:51 · 95 阅读 · 0 评论 -
LeetCode-动态规划-198. 打家劫舍
198. 打家劫舍思路:dp[i] = max(dp[i-2]+nums[i], dp[i-1])class Solution {public: int rob(vector<int>& nums) { int size_n = nums.size(); if(nums.empty()) return 0; if(nums.size()==1) return nums[0]; vector<int>原创 2021-10-12 22:19:40 · 89 阅读 · 0 评论 -
LeetCode-动态规划背包题-1049. 最后一块石头的重量 II
描述1049. 最后一块石头的重量 II有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0原创 2021-08-23 19:38:27 · 1101 阅读 · 0 评论 -
LeetCode-动态规划背包题-416. 分割等和子集
描述416. 分割等和子集给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例 1:输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。示例 2:输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。思路一:动态规划使用01背包的思路解class Solution {public: bool canP原创 2021-08-23 16:54:04 · 222 阅读 · 0 评论 -
LeetCode-动态规划基础题-343. 整数拆分
描述343. 整数拆分给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。思路:动态规划class Solution {public: int integerBreak(int n) {原创 2021-08-22 16:08:54 · 80 阅读 · 0 评论 -
LeetCode-动态规划基础题-63. 不同路径II
描述63. 不同路径II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。思路一:动态规划1:确定dp数组与下标的含义dp[i][j]:表示从(0,0)出发,到(i,j)有dp[i][j]条不同的路径2:确定了递推公式递推公式和62.原创 2021-08-22 14:37:02 · 348 阅读 · 0 评论 -
LeetCode-动态规划基础题-746. 使用最小花费爬楼梯
描述746.使用最小花费爬楼梯数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例 1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。示例原创 2021-08-20 15:45:57 · 112 阅读 · 0 评论 -
LeetCode-动态规划基础题-62. 不同路径
描述62. 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向下 -> 向下向下 -> 向下 -> 向右向下 -&原创 2021-08-20 17:28:56 · 84 阅读 · 0 评论 -
LeetCode-基础动态规划-70. 爬楼梯
描述70.爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶思路一:递归解法题目分析:第1级台阶:1种方法(爬1级)第2级台阶:2中方法(爬1级原创 2021-08-20 11:19:36 · 116 阅读 · 0 评论 -
LeetCode-动态规划基础题-509. 斐波那契数
描述题目如下:509. 斐波那契数斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。思路一:递归时间复杂度:O(2^n)空间复杂度:O(n)class Solution {public: int fib(int n) { if(n=原创 2021-08-19 18:35:17 · 84 阅读 · 0 评论