动态规划
文章平均质量分 53
Sun_Sky_Sea
站在巨人的肩膀上
展开
-
322. 零钱兑换
这里定义dp[i]表示金额为i的最少需要dp[i]个硬币个数可以表示金额i,那么,dp[i]= min(dp[i], dp[i - coin] + 1),子问题就是dp[i - coin],每次计算dp[i],就是计算当前dp[i]和它的子问题dp[i - coin] + 1的最小值,1表示可以从子问题的解中再从硬币数组中找到一个硬币,满足问题的解。输入:coins = [1, 2, 5], amount = 11。输入:coins = [1], amount = 0。解释:11 = 5 + 5 + 1。原创 2022-09-19 22:44:13 · 1250 阅读 · 0 评论 -
313. 超级丑数
解释:给定长度为 4 的质数数组 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32]。题目的意思是,后面的超级丑数是给定的primes数组中的数乘以前面的超级丑数得到的,使用动态规划解题。解释:1 不含质因数,因此它的所有质因数都在质数数组 primes = [2,3,5] 中。输入:n = 12, primes = [2,7,13,19]输入:n = 1, primes = [2,3,5]原创 2022-09-03 23:37:59 · 87 阅读 · 0 评论 -
309. 最佳买卖股票时机含冷冻期
设计一个算法计算出最大利润。给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格。解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。动态规划,设定状态和动态转移方程,具体看代码及注释。输入: prices = [1,2,3,0,2]输入: prices = [1]...原创 2022-08-30 11:55:27 · 249 阅读 · 0 评论 -
10. 正则表达式匹配
原始题目链接:https://leetcode.cn/problems/regular-expression-matching/给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa”, p = “a”输出:false解释:“a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”, p =原创 2022-06-18 15:20:55 · 251 阅读 · 0 评论 -
72. 编辑距离
原始题目链接:https://leetcode.cn/problems/edit-distance/给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros原创 2022-06-15 23:52:26 · 65 阅读 · 0 评论 -
42. 接雨水
42. 接雨水原始题目链接:https://leetcode.cn/problems/trapping-rain-water/给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。解题思路:按列来计算接雨水的面积,宽度为1,那么只要计算高度就可以了,用高度乘以宽度得到每一列的接水面积。分别从两个方向统计当前柱子的左边和右边的最高的柱子。当前列雨水面积:min(左边柱子的最高高度,记录右边柱子的最高高度) - 当前柱子高度,当前位置,左边的最高高度是前一原创 2022-05-27 15:22:40 · 92 阅读 · 0 评论 -
337. 打家劫舍 III
打家劫舍 III原始题目链接:https://leetcode-cn.com/problems/house-robber-iii/小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。输.原创 2022-02-14 22:52:21 · 308 阅读 · 0 评论 -
213. 打家劫舍 II
打家劫舍 II原始题目链接:https://leetcode-cn.com/problems/house-robber-ii/你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums.原创 2022-02-13 15:10:34 · 187 阅读 · 0 评论 -
198. 打家劫舍
打家劫舍原始题目链接:https://leetcode-cn.com/problems/house-robber/你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然.原创 2022-02-12 18:13:30 · 59 阅读 · 0 评论 -
300. 最长递增子序列
300. 最长递增子序列原始题目链接:https://leetcode-cn.com/problems/longest-increasing-subsequence/给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,原创 2022-01-12 21:26:14 · 59 阅读 · 0 评论 -
221. 最大正方形
221. 最大正方形原始题目链接:https://leetcode-cn.com/problems/maximal-square/在一个由 ‘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”,“原创 2022-01-06 15:01:36 · 271 阅读 · 0 评论 -
264. 丑数 II
264. 丑数 II原始题目链接:https://leetcode-cn.com/problems/ugly-number-ii/给你一个整数 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 通常被视为丑数。解题思路:动态规划,三步走,定义状态,dp[原创 2021-12-25 21:20:50 · 278 阅读 · 0 评论 -
139. 单词拆分
139. 单词拆分原始题目链接:https://leetcode-cn.com/problems/word-break/给你一个字符串 s 和一个字符串列表 wordDict 作为字典,判定 s 是否可以由空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示原创 2021-12-22 20:44:18 · 129 阅读 · 0 评论 -
91. 解码方法
91. 解码方法原始题目链接:https://leetcode-cn.com/problems/decode-ways/一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> 1‘B’ -> 2…‘Z’ -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:“AAJF” ,将消息分组为 (1 1 10 6)“KJF” ,将消息分组为 (11 10 6)注意,消息不能分组为 (原创 2021-12-13 20:57:49 · 464 阅读 · 0 评论 -
95. 不同的二叉搜索树 II
95. 不同的二叉搜索树 II原始题目链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii/给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。解题思路:回溯法,定义一个函数:G(s, e)函数表示当前值的集合为[start,end],返回序列[start,end]生成的所有可行的二叉搜索树,枚举 [start,end] 中的值 i原创 2021-11-18 22:54:52 · 311 阅读 · 0 评论 -
96. 不同的二叉搜索树
96. 不同的二叉搜索树原始题目链接:https://leetcode-cn.com/problems/unique-binary-search-trees/给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。解题思路:题目求解不同的二叉搜索树的个数,这种求不同的个数或不同走法等类似的问题,可以想到可能是要用动态规划的方法解题。动态规划三步走:定义状态,找状态转移方程,边界赋初始值。具体实现看代码及注释。代码实现原创 2021-11-15 23:10:32 · 226 阅读 · 0 评论 -
63. 不同路径 II
63. 不同路径 II原始题目链接:https://leetcode-cn.com/problems/unique-paths-ii/一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?解题思路:和第62题的思路一样,只不过有障碍物,判断排除包含障碍物的路径即可,因为经过障碍物的路径是如何原创 2021-11-14 22:54:55 · 55 阅读 · 0 评论 -
62. 不同路径
62. 不同路径原始题目链接:https://leetcode-cn.com/problems/unique-paths/一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?解题思路:动态规划,动态规划的题目需要定义状态,找状态转移方程,并且需要初始化边界条件,本题目的边界条件就是第一行和第一列,因为第一行的走法只有向右,第一列原创 2021-11-14 22:35:01 · 65 阅读 · 0 评论 -
376. 摆动序列
376. 摆动序列原始题目链接:https://leetcode-cn.com/problems/wiggle-subsequence/如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5,原创 2021-11-01 19:40:01 · 307 阅读 · 0 评论 -
64. 最小路径和
64. 最小路径和原始题目链接:https://leetcode-cn.com/problems/minimum-path-sum/给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。解题思路:典型的动态规划题,定义动态数组,这里定义dp[i][j]表示,到达grid数组的坐标为(i,j)位置的最小路径和,初始化动态dp数组,赋初始值,注意边界条件和非边界条件的赋值,具体实现看代码及注释。代原创 2021-08-05 15:30:02 · 82 阅读 · 0 评论 -
583. 两个字符串的删除操作
583. 两个字符串的删除操作原始题目链接:https://leetcode-cn.com/problems/delete-operation-for-two-strings/给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例:输入: “sea”, “eat”输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"解题思路:转换为两个字符串的长度之和减去两个字符串的最长公共原创 2021-06-20 21:07:19 · 153 阅读 · 0 评论 -
97. 交错字符串
97. 交错字符串原始题目链接:https://leetcode-cn.com/problems/interleaving-string/给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + … + snt = t1 + t2 + … + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 +原创 2021-06-10 14:11:41 · 119 阅读 · 0 评论