动态规划
把leetcode上面的知识点分类归纳,方便复习
Qin酱
这个人是个懒狗,什么都没有留下。
展开
-
动态规划解题思路
动态规划动态规划最重要的是掌握他的思想,动态规划的核心思想是把原问题分解成子问题进行求解,也就是分治的思想。1.理论知识特点1:存在重复的子问题,所以需要保存之前的计算结果特点2:最优子结构,最优解肯定是有最优的子解转移推导而来,子解必定也是子问题的最优解。特点3:无后效性:求出来的子问题并不会因为后面求出来的改变。思考方向:自顶而下,使用递归+记忆化; 自底向上:递推求解2.状态状态的定义,先尝试「题目问什么,就把什么设置为状态」;3.状态转移方程然后思考「状态如何转移」,如果「原创 2020-08-14 11:57:01 · 537 阅读 · 0 评论 -
leetcode 887. 鸡蛋掉落
887. 鸡蛋掉落你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。你的目标是确切地知道 F 的值是多少。无论 F 的初始值如何,你确定 F原创 2020-07-09 19:36:48 · 99 阅读 · 0 评论 -
leetcode 410. 分割数组的最大值
410. 分割数组的最大值给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自的和的最大值为18,在所有情原创 2020-07-25 18:28:17 · 401 阅读 · 0 评论 -
leetcode 542. 01 矩阵
542. 01 矩阵给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0示例 2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1注意:给定矩阵的元素个数不超过 10000。给定矩阵中至少有一个元素是 0。矩阵中的元素只在四个方向上相邻: 上、下、左、右。通过次数36,475提交次数81,411第一种是原创 2020-07-31 22:20:49 · 109 阅读 · 0 评论 -
leetcode 5490. 吃掉 N 个橘子的最少天数
5490. 吃掉 N 个橘子的最少天数厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子:吃掉一个橘子。如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。如果剩余橘子数 n 能被 3 整除,那么你可以吃掉 2*(n/3) 个橘子。每天你只能从以上 3 种方案中选择一种方案。请你返回吃掉所有 n 个橘子的最少天数。示例 1:输入:n = 10输出:4解释:你总共有 10 个橘子。第 1 天:吃 1 个橘子,剩余橘子数 10 - 1 = 9。第 2 天:吃原创 2020-08-16 13:38:19 · 318 阅读 · 0 评论 -
leetcode 714. 买卖股票的最佳时机含手续费
714. 买卖股票的最佳时机含手续费给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入: prices = [1, 3, 2, 8, 4, 9], fee = 2输出: 8解释: 能原创 2020-07-10 16:34:05 · 95 阅读 · 0 评论 -
leetcode 546. 移除盒子
546. 移除盒子给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色。你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续 k 个盒子(k >= 1),这样一轮之后你将得到 k*k 个积分。当你将所有盒子都去掉之后,求你能获得的最大积分和。示例:输入:boxes = [1,3,2,2,2,3,4,3,1]输出:23解释:[1, 3, 2, 2, 2, 3, 4, 3, 1]----> [1, 3, 3, 4, 3, 1原创 2020-08-15 10:54:45 · 190 阅读 · 0 评论 -
leetcode 494. 目标和
494. 目标和给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3一共有5种方法让最终原创 2020-07-31 00:04:15 · 141 阅读 · 0 评论 -
leetcode 354. 俄罗斯套娃信封问题
354. 俄罗斯套娃信封问题给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]输出: 3解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] =&原创 2020-07-31 15:55:05 · 179 阅读 · 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。我的思路就是先找下规律:5: 2x3=66: 3x3=97: 3x4=128: 2x3x3=189: 3x3原创 2020-07-30 09:39:50 · 242 阅读 · 0 评论 -
leetcode 338. 比特位计数
338. 比特位计数给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]我们可以发现一下规律:0:01:1----2:1 发现 dp[2] = dp[0]+1 base = 23:2 发现 dp[3] = dp[1]+1 base = 2-------4:1 发现 dp[4]原创 2020-08-07 10:29:00 · 91 阅读 · 0 评论 -
leetcode 322. 零钱兑换
322. 零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你可以认为每种硬币的数量是无限的。动态转移方程解释:当前硬币面值大于所需面值时,由上一个币值数原创 2020-07-12 22:45:53 · 97 阅读 · 0 评论 -
leetcode 312. 戳气球
312. 戳气球“”"有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。说明:你可以假设 nums[-1] = nums[n] = 1,原创 2020-07-19 20:19:45 · 169 阅读 · 0 评论 -
leetcode 309. 最佳买卖股票时机含冷冻期
309. 最佳买卖股票时机含冷冻期给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]dp[i][0]持有股票dp[i][1]未持股票,原创 2020-07-10 15:34:32 · 86 阅读 · 0 评论 -
leetcode 304. 二维区域和检索 - 矩阵不可变
304. 二维区域和检索 - 矩阵不可变给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2)。Range Sum Query 2D上图子矩阵左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 8。示例:给定 matrix = [[3, 0, 1, 4, 2],[5, 6, 3, 2, 1],[1, 2, 0, 1, 5],[4, 1,原创 2020-08-16 09:31:29 · 174 阅读 · 0 评论 -
leetcode 300. 最长上升子序列
300. 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到由于这里不是一个连续的递增,所以开始我打算使用栈来做,就不对。借鉴了大佬的思路。动态规划方法:dp[i] 表示第i个数字(包含)截至原创 2020-07-31 14:29:24 · 158 阅读 · 0 评论 -
leetcode 279. 完全平方数
279. 完全平方数给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.首先想到的是使用动态规划的方法,dp[ i ]就表示数字 i 所需要的最小组合个数。初始化dp列表,在平方和索引的位置置为1,为了方便计算,就多设置了0索引,其实没用。从左向右依次计原创 2020-07-20 13:05:27 · 148 阅读 · 0 评论 -
leetcode 264. 丑数 II
264. 丑数 II编写一个程序,找出第 n 个丑数。丑数就是质因数只包含 2, 3, 5 的正整数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。这道题万万没想到=-=,三指针!我们可以知道下一个丑数肯定是由之前一个丑数乘以2/3/5得到了最小的大于前一个丑数的值。但是具体是乘以谁?这个就不知道了,所以这道题弄了一个三指针。初始化的时候,三个指针都等于 0原创 2020-08-01 23:40:19 · 70 阅读 · 0 评论 -
leetcode 221. 最大正方形
221. 最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4DP方程:dp[i][j]=dp[i−1][j−1]+2∗sqrt(dp[i−1][j−1])+1,左;上;对角三者相等,且不为0 dp[i][j] = dp[i-1][j-1]+2*sqrt(dp[i-1][j-1])+1, 左;上;对角三者相等,且不为0dp[i][j]=dp[i−1][原创 2020-08-07 10:30:20 · 119 阅读 · 0 评论 -
leetcode 213. 打家劫舍 II
213. 打家劫舍 II你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]输出: 3解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他原创 2020-07-09 23:18:51 · 163 阅读 · 0 评论 -
leetcode 198. 打家劫舍
198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输原创 2020-07-09 21:38:04 · 113 阅读 · 0 评论 -
leetcode 188. 买卖股票的最佳时机 IV
188. 买卖股票的最佳时机 IV给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [2,4,1], k = 2输出: 2解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。示例 2:输入: [3,2,6,5,0,3], k原创 2020-07-10 21:50:22 · 135 阅读 · 0 评论 -
leetcode 174. 地下城游戏
174. 地下城游戏一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数原创 2020-07-12 11:01:40 · 120 阅读 · 0 评论 -
leetcode 152. 乘积最大子数组
152. 乘积最大子数组给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。这道题的难点在于负数会让一段乘积在正负当中变化,不好比较大小。退一步思考,我们第 i个数是正数,那么希望前面的乘积段为正,越大越好。如果第 i原创 2020-07-13 12:22:49 · 111 阅读 · 0 评论 -
leetcode 139. 单词拆分
139. 单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”,原创 2020-07-11 12:05:34 · 184 阅读 · 0 评论 -
leetcode 132. 分割回文串 II
分割回文串 II给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回符合要求的最少分割次数。示例:输入: “aab”输出: 1解释: 进行一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-partitioning-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。这道题还是动态规划的问题,首先我们设定d.原创 2020-07-12 12:59:01 · 126 阅读 · 0 评论 -
leetcode 123. 买卖股票的最佳时机 III
123. 买卖股票的最佳时机 III给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。随后,在第 7 天(股票价格 = 1)的时候买入,在原创 2020-07-10 19:46:25 · 89 阅读 · 1 评论 -
leetcode 121. 买卖股票的最佳时机
买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。.原创 2020-07-10 10:33:22 · 143 阅读 · 0 评论 -
leetcode 120. 三角形最小路径和
120. 三角形最小路径和给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。“”"首先是使用二原创 2020-07-11 00:04:47 · 141 阅读 · 0 评论 -
leetcode 115. 不同的子序列
不同的子序列给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)题目数据保证答案符合 32 位带符号整数范围。示例 1:输入:S = “rabbbit”, T = “rabbit”输出:3解释:如下图所示, 有 3 种可以从 S 中得到 “rabbit” 的方案。(上箭头符号 ^ 表.原创 2020-07-12 08:50:39 · 110 阅读 · 0 评论 -
leetcode 97. 交错字符串
97. 交错字符串给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbcbcac”输出: true示例 2:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbbaccc”输出: false这道题还是建立dp表格进行求解,dp[ i ][ j ] 表示 s1的前 i - 1个和 s2的前 j - 1 个,能够组合的字符串与s原创 2020-07-11 18:35:23 · 148 阅读 · 0 评论 -
leetcode 96. 不同的二叉搜索树
96. 不同的二叉搜索树给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:举例 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1原创 2020-07-11 14:49:46 · 141 阅读 · 0 评论 -
leetcode 91. 解码方法
91. 解码方法一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。开始我想到的递归,但是递归做出来之后虽然能原创 2020-07-09 08:55:48 · 102 阅读 · 0 评论 -
leetcode 87. 扰乱字符串
87. 扰乱字符串给出两个长度相等的字符串 s1 和 s2,判断 s2 是否是 s1 的扰乱字符串。示例 1:输入: s1 = “great”, s2 = “rgeat”输出: true示例 2:输入: s1 = “abcde”, s2 = “caebd”输出: falsefrom typing import Listclass Solution: def isScramble(self, s1: str, s2: str) -> bool: if s1 ==原创 2020-07-08 20:21:46 · 216 阅读 · 1 评论 -
leetcode 85. 最大矩形
85. 最大矩形给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出: 6图像来自https://leetcode-cn.com/problems/maximal-rectangle/solution/cyu-yan-dan-diao-zhan-by-dud原创 2020-07-08 15:15:46 · 184 阅读 · 0 评论 -
leetcode 72. 编辑距离
72. 编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:word1 = “i原创 2020-07-07 17:25:10 · 79 阅读 · 0 评论 -
leetcode 70. 爬楼梯
70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶第一种解法会超时,使用有备忘录的第二种解法。class Solution: def原创 2020-07-07 14:46:27 · 89 阅读 · 0 评论 -
leetcode 53. 最大子序和
53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。这里使用的是动态规划的思想,每一个nums内的最大和,只与上一个和本个的值有关。from typing import Listclass Solution:原创 2020-07-07 14:47:37 · 111 阅读 · 0 评论 -
leetcode 44. 通配符匹配
44. 通配符匹配给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa原创 2020-07-07 10:18:43 · 209 阅读 · 0 评论 -
leetcode 10. 正则表达式匹配
10. 正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:原创 2020-07-06 23:01:43 · 145 阅读 · 0 评论