动态规划
小Aer
站在巨人的肩膀上仰望星空
展开
-
LeetCode-300. 最长递增子序列
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。解释:最长递增子序列是 [2,3,7,101],因此长度为 4。给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。输入:nums = [10,9,2,5,3,7,101,18]输入:nums = [7,7,7,7,7,7,7]输入:nums = [0,1,0,3,2,3]...原创 2022-08-04 18:08:20 · 215 阅读 · 0 评论 -
LeetCode-221. 最大正方形
在一个由‘0’和‘1’组成的二维矩阵内,找到只包含‘1’的最大正方形,并返回其面积。链接https//leetcode.cn/problems/maximal-square。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。来源力扣(LeetCode)...原创 2022-07-21 17:15:33 · 123 阅读 · 0 评论 -
LeetCode-198. 打家劫舍
每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。每隔两个作一次判断和取舍,temp主要为了暂时保留更新后left,在对right时需要用到原来的left,最后循环外也要更新。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。时间复杂度O(n),空间复杂度O(1)时间复杂度O(n),空间复杂度O(1)来源力扣(LeetCode)输入[1,2,3,1]...原创 2022-07-21 16:01:03 · 101 阅读 · 0 评论 -
LeetCode-139. 单词拆分
leetcode 单词拆分原创 2022-07-19 15:00:50 · 161 阅读 · 0 评论 -
LeetCode-95. 不同的二叉搜索树 II
不同的二叉搜索树II原创 2022-06-06 17:00:19 · 113 阅读 · 0 评论 -
96. 不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。示例 1:输入:n = 3输出:5示例 2:输入:n = 1输出:1提示:1 <= n <= 19思路:代码:class Solution: def numTrees(self, n: int) -> int: dp = [0]*(n+1) dp[0], dp[1] = 1, 1原创 2022-05-15 10:57:52 · 92 阅读 · 0 评论 -
爬楼梯,一次爬1-k阶,一共n阶楼梯,一共多少种方法
代码:我这里下标1表示1阶楼梯,为了下标的方便输入:number表示楼梯总数,k表示一次爬多少阶楼梯def jumpd(number, k): dp = [0]*(number+1) dp[0], dp[1] = 1, 1 for i in range(2, k): dp[i] = sum(dp[0:i]) for j in range(k, number+1): dp[j] = sum(dp[j-k:j]) return dp[原创 2022-05-14 20:29:58 · 383 阅读 · 0 评论 -
91. 解码方法
一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A' -> "1"'B' -> "2"...'Z' -> "26"要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:“AAJF” ,将消息分组为 (1 1 10 6)“KJF” ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映射为 “F” ,这是由于 “6” 和 “06” 在映射中并不等价原创 2022-05-14 17:51:09 · 94 阅读 · 0 评论 -
64. 最小路径和
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12来源:力扣(LeetCode)链接:https://leetcode.cn/problems/minimum-path-su原创 2022-05-13 15:57:46 · 66 阅读 · 0 评论 -
63. 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径:原创 2022-05-06 09:59:06 · 187 阅读 · 0 评论 -
62. 不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右3. 向下 ->原创 2022-05-05 11:06:46 · 113 阅读 · 0 评论 -
55. 跳跃游戏
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。原创 2022-05-05 10:46:37 · 134 阅读 · 0 评论 -
22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:引用原创 2022-05-04 21:11:21 · 108 阅读 · 0 评论 -
647. 回文子串
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:s = "abc"输出:3解释:三个回文子串: "a", "b", "c"示例 2:输入:s = "aaa"输出:6解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"思路:5. 最长回文子串原创 2022-05-02 20:15:57 · 283 阅读 · 0 评论 -
5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"代码:class Solution: def longestPalindrome(self, s: str) -> str: n = len(s) dp = [[False]*n for _ in range(n)] max_len原创 2022-05-02 16:04:41 · 291 阅读 · 0 评论 -
516. 最长回文子序列
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例 1:输入:s = "bbbab"输出:4解释:一个可能的最长回文子序列为 "bbbb" 。示例 2:输入:s = "cbbd"输出:2解释:一个可能的最长回文子序列为 "bb" 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-原创 2022-05-02 15:56:02 · 68 阅读 · 0 评论 -
将一个字符串变成另外一个字符串(字节一面笔试题)
只可以使用增删改三种操作,求最少操作次数。使用动态规划的思想# 将一个字符串变成另外一个字符串的最少操作次数def get(a, b): len1, len2 = len(a), len(b) dp = [[0]*(len2+1) for _ in range(len1+1)] for i in range(len1+1): dp[i][0] = i for j in range(len2+1): dp[0][j] = j for原创 2022-04-29 10:28:53 · 948 阅读 · 0 评论