
力扣【动态规划】专题
力扣的动态规划题解
Crazy丶code
进步、学习、阳光、平和
展开
-
【力扣-动态规划入门】【第 21 天】279. 完全平方数
标题:279. 完全平方数难度:中等天数:第21天,第3/3题给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。 示例 1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13 = 4 + 9提示: 1 <= n &l原创 2022-01-27 14:07:03 · 750 阅读 · 0 评论 -
【力扣-动态规划入门】【第 21 天】343. 整数拆分
标题:343. 整数拆分难度:中等天数:第21天,第2/3题给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。以上来源原创 2022-01-26 14:35:43 · 494 阅读 · 0 评论 -
【力扣-动态规划入门】【第 21 天】377. 组合总和 Ⅳ
标题:377. 组合总和 Ⅳ难度:中等天数:第21天,第1/3题给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。示例 1:输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请原创 2022-01-25 15:59:31 · 514 阅读 · 0 评论 -
【力扣-动态规划入门】【第 20 天】518. 零钱兑换 II
标题:518. 零钱兑换 II难度:中等天数:第20天,第2/2题给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号整数。示例 1:输入:amount = 5, coins = [1, 2, 5]输出:4解释:有四种方式可以凑成总金额:5=55=2+2+15=2原创 2022-01-25 15:54:55 · 155 阅读 · 0 评论 -
【力扣-动态规划入门】【第 20 天】322. 零钱兑换
标题:322. 零钱兑换难度:中等天数:第20天,第1/2题给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], a原创 2022-01-24 20:06:47 · 404 阅读 · 0 评论 -
【力扣-动态规划入门】【第 19 天】72. 编辑距离
标题:72. 编辑距离难度:困难天数:第19天,第3/3题给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)r原创 2022-01-24 14:33:09 · 290 阅读 · 0 评论 -
【力扣-动态规划入门】【第 19 天】1143. 最长公共子序列
标题:1143. 最长公共子序列难度:中等天数:第19天,第2/3题给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串原创 2022-01-23 20:05:46 · 139 阅读 · 0 评论 -
【力扣-动态规划入门】【第 19 天】392. 判断子序列
标题:392. 判断子序列难度:简单天数:第19天,第1/3题给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?致谢:特别感谢 @pb原创 2022-01-22 20:28:43 · 171 阅读 · 0 评论 -
【力扣-动态规划入门】【第 18 天】376. 摆动序列
标题:376. 摆动序列难度:中等天数:第18天,第2/2题如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。 相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序原创 2022-01-21 10:49:21 · 124 阅读 · 0 评论 -
【力扣-动态规划入门】【第 18 天】300. 最长递增子序列
标题:300. 最长递增子序列难度:中等天数:第18天,第1/2题给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums =原创 2022-01-21 10:45:57 · 94 阅读 · 0 评论 -
【力扣-动态规划入门】【第 17 天】516. 最长回文子序列
标题:516. 最长回文子序列难度:中等天数:第17天,第2/2题给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例 1:输入:s = “bbbab”输出:4解释:一个可能的最长回文子序列为 “bbbb” 。示例 2:输入:s = “cbbd”输出:2解释:一个可能的最长回文子序列为 “bb” 。提示: 1 <= s.length <= 10原创 2022-01-20 13:59:14 · 540 阅读 · 0 评论 -
【力扣-动态规划入门】【第 17 天】5. 最长回文子串
标题:5. 最长回文子串难度:中等天数:第17天,第1/2题给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示: 1 <= s.length <= 1000 s 仅由数字和英文字母(大写和/或小写)组成原创 2022-01-20 13:55:13 · 359 阅读 · 0 评论 -
【力扣-动态规划入门】【第 16 天】221. 最大正方形
标题:221. 最大正方形难度:中等天数:第16天,第2/2题在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。 示例 1:输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出:4示例 2:输入:matrix = [[“0”,“1”],[“1”,“0”]]输出:1原创 2022-01-19 11:12:52 · 272 阅读 · 0 评论 -
【力扣-动态规划入门】【第 16 天】64. 最小路径和
标题:64. 最小路径和难度:中等天数:第16天,第1/2题给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,原创 2022-01-19 11:07:59 · 101 阅读 · 0 评论 -
【力扣-动态规划入门】【第 15 天】63. 不同路径 II
标题:63. 不同路径 II难度:中等天数:第15天,第2/2题一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2原创 2022-01-18 11:03:06 · 205 阅读 · 0 评论 -
【力扣-动态规划入门】【第 15 天】62. 不同路径
标题:62. 不同路径难度:中等天数:第15天,第1/2题一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径? 示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -原创 2022-01-18 10:56:37 · 112 阅读 · 0 评论 -
【力扣-动态规划入门】【第 14 天】304. 二维区域和检索 - 矩阵不可变
标题:304. 二维区域和检索 - 矩阵不可变难度:中等天数:第14天,第2/2题给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的 左上角 为(row1, col1) ,右下角 为(row2, col2) 。 实现 NumMatrix 类: NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化 int sumRegion(int row1, int col1, int原创 2022-01-17 16:47:03 · 412 阅读 · 0 评论 -
【力扣-动态规划入门】【第 14 天】1314. 矩阵区域和
标题:1314. 矩阵区域和难度:中等天数:第14天,第1/2题给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和: i - k <= r <= i + k, j - k <= c <= j + k 且 (r, c) 在矩阵内。原创 2022-01-16 20:54:46 · 492 阅读 · 0 评论 -
【力扣-动态规划入门】【第 13 天】120. 三角形最小路径和
标题:120. 三角形最小路径和难度:中等天数:第13天,第2/2题给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。示例 1:输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]输出:11解释:如下面简原创 2022-01-15 18:26:33 · 153 阅读 · 0 评论 -
【力扣-动态规划入门】【第 13 天】931. 下降路径最小和
标题:931. 下降路径最小和难度:中等天数:第13天,第1/2题给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (ro原创 2022-01-15 17:46:57 · 224 阅读 · 0 评论 -
【力扣-动态规划入门】【第 12 天】119. 杨辉三角 II
标题:119. 杨辉三角 II难度:简单天数:第12天,第2/2题给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: rowIndex = 3输出: [1,3,3,1]示例 2:输入: rowIndex = 0输出: [1]示例 3:输入: rowIndex = 1输出: [1,1]提示: 0 <= rowIndex <= 33进原创 2022-01-14 20:16:47 · 279 阅读 · 0 评论 -
【力扣-动态规划入门】【第 12 天】118. 杨辉三角
标题:118. 杨辉三角难度:简单天数:第12天,第1/2题给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:输入: numRows = 1输出: [[1]]提示: 1 <= numRows <=原创 2022-01-14 19:28:46 · 212 阅读 · 0 评论 -
【力扣-动态规划入门】【第 11 天】96. 不同的二叉搜索树
标题:96. 不同的二叉搜索树难度:中等天数:第11天,第2/2题给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。示例 1:输入:n = 3输出:5示例 2:输入:n = 1输出:1提示: 1 <= n <= 19来源:力扣(LeetCode)著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。为了便于理解,可查看最后解题思路:class So原创 2022-01-13 20:42:40 · 77 阅读 · 0 评论 -
【力扣-动态规划入门】【第 11 天】264. 丑数 II
标题:264. 丑数 II难度:中等天数:第11天,第1/2题给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例 1:输入:n = 10输出:12解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2:输入:n = 1输出:1解释:1 通常被视为丑数。提示: 1 <= n <= 1690来源:力扣原创 2022-01-13 19:53:24 · 182 阅读 · 0 评论 -
【力扣-动态规划入门】【第 10 天】91. 解码方法
标题:91. 解码方法难度:中等天数:第10天,第2/2题一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> 1‘B’ -> 2…‘Z’ -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为: "AAJF" ,将消息分组为 (1 1 10 6) "KJF" ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06)原创 2022-01-12 14:32:34 · 265 阅读 · 0 评论 -
【力扣-动态规划入门】【第 10 天】413. 等差数列划分
标题:413. 等差数列划分难度:中等天数:第10天,第1/2题如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。子数组 是数组中的一个连续序列。示例 1:输入:nums = [1,2,3,4]输出:3解释:nums 中有三个子等差数组:[1, 2, 3]、[原创 2022-01-12 14:29:00 · 135 阅读 · 0 评论 -
【力扣-动态规划入门】【第 9 天】42. 接雨水
标题:42. 接雨水难度:困难天数:第9天,第2/2题给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9&nb原创 2022-01-11 14:50:16 · 100 阅读 · 0 评论 -
【力扣-动态规划入门】【第 9 天】139. 单词拆分
标题:139. 单词拆分难度:中等天数:第9天,第1/2题给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以由 “leet” 和 “code” 拼接成。示例 2:输入原创 2022-01-11 14:43:48 · 403 阅读 · 0 评论 -
【力扣-动态规划入门】【第 8 天】714. 买卖股票的最(佳)时机含手续费
标题:714. 买卖股票的最佳时机含手续费难度:中等天数:第8天,第2/2题给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。原创 2022-01-10 17:40:54 · 144 阅读 · 0 评论 -
【力扣-动态规划入门】【第 8 天】309. 最(佳)买卖股票时机含冷冻期
标题:309. 最佳买卖股票时机含冷冻期难度:中等天数:第8天,第1/2题给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状原创 2022-01-10 17:35:42 · 73 阅读 · 0 评论 -
【力扣-动态规划入门】【第 7 天】122. 买卖股票的最(佳)时机 II
标题:122. 买卖股票的最佳时机 II难度:中等天数:第7天,第3/3题给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 =原创 2022-01-09 17:00:00 · 119 阅读 · 0 评论 -
【力扣-动态规划入门】【第 7 天】121. 买卖股票的最(佳)时机
标题:121. 买卖股票的最佳时机难度:简单天数:第7天,第2/3题给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候原创 2022-01-09 10:00:00 · 84 阅读 · 0 评论 -
【力扣-动态规划入门】【第 7 天】1014. 最(佳)观光组合
标题:1014. 最佳观光组合难度:中等天数:第7天,第1/3题给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的 距离 为 j - i。一对景点(i < j)组成的观光组合的得分为 values[i] + values[j] + i - j ,也就是景点的评分之和 减去 它们两者之间的距离。返回一对观光景点能取得的最高分。示例 1:输入:values原创 2022-01-08 16:43:11 · 126 阅读 · 0 评论 -
【力扣-动态规划入门】【第 6 天】1567. 乘积为正数的最长子数组长度
动态规划入门 第六天标题:1567. 乘积为正数的最长子数组长度难度:中等天数:第6天,第2/2题原创 2022-01-08 10:00:00 · 144 阅读 · 0 评论 -
【力扣-动态规划入门】【第 6 天】152. 乘积最大子数组
标题:152. 乘积最大子数组难度:中等天数:第6天,第1/2题原创 2022-01-07 14:26:47 · 519 阅读 · 0 评论 -
【力扣-动态规划入门】【第 5 天】918. 环形子数组的最大和
标题:918. 环形子数组的最大和难度:中等天数:第5天,第2/2题原创 2022-01-07 14:21:59 · 235 阅读 · 0 评论 -
【力扣-动态规划入门】【第 5 天】53. 最大子数组和
标题:53. 最大子数组和难度:简单描述:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。原创 2021-12-28 16:52:05 · 168 阅读 · 0 评论 -
【力扣-动态规划入门】【第 4 天】45. 跳跃游戏 II
标题:45. 跳跃游戏 II难度:中等天数:第4天,第2/2题给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳&nb原创 2022-01-06 17:16:51 · 166 阅读 · 0 评论 -
【力扣-动态规划入门】【第 4 天】55. 跳跃游戏
标题:55. 跳跃游戏难度:中等天数:第4天,第1/2题给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论原创 2022-01-06 17:13:59 · 116 阅读 · 0 评论 -
【力扣-动态规划入门】【第 3 天】740. 删除并获得点数
标题:740. 删除并获得点数难度:中等天数:第3天,第3/3题给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2]输出:6原创 2022-01-05 10:02:02 · 444 阅读 · 0 评论