动态规划
_amnesia_
这个作者很懒,什么都没留下…
展开
-
leetcode 72. 编辑距离
题解dp 动态规划 很经典的一道题目dp[i][j] 表示 word1 到 i 位置转换为 word2 到 j 位置的最小步数当 word1[i] == word2[j] 时,dp[i][j] = dp[i-1][j-1]当 word1[i] != word2[j] 时,dp[i][j] = min(dp[i - 1][j - 1] , dp[i-1][j],dp[i][j-1]) + 1其中还包含初始化操作当word2字符串为空,word1变为word2只需要删除当时存在的字符即可当word原创 2021-06-17 18:55:33 · 73 阅读 · 0 评论 -
leetcode 64. 最小路径和
题解呀 独立做出来的,果然 熟能生巧还和昨天的那个一样,动态规划dp[i][j] 表示从左上角走到i,j点时最短距离,那么dp[i][j] = grid[i][j] + min(dp[i -1][j],dp[i][j-1])初始化是第一行第一列的最短路径就是到这点时这行和这列的数的总和。有什么不对的或者简便的算法欢迎指正~代码class Solution {public: int minPathSum(vector<vector<int>>& grid原创 2021-06-14 09:52:42 · 69 阅读 · 0 评论 -
leetcode 62. 不同路径
题解动态规划f(i,j) 表示从左上角到(i,j) 点的路径和,那么走到ij 的前一点到ij 有两种方式那么 f(i,j) = f(i-1,j) + f(i,j-1)其中初始化 f(0,0) = 1,f(i,0) = 1,f(0,j) = 1,因为从左上角走到这几点的位置只有一条路径。代码class Solution {public: int uniquePaths(int m, int n) { vector<vector<int>> f(m,原创 2021-06-13 08:48:14 · 60 阅读 · 0 评论 -
leetcode 53. 最大子序和
题解简单的动态规划吧算是还是比较简单的题目首先计算sum的值,如果和的值大于0那么这一段的和就对后面那个数有用,否则,就重新从下一个数开始,然后取最大值。代码class Solution {public: int maxSubArray(vector<int>& nums) { int n = nums.size(); int ans = nums[0],sum = 0; for(int i = 0; i < n;原创 2021-05-02 10:52:45 · 60 阅读 · 0 评论 -
leetcode 32. 最长有效括号
题解i’m coming~终于又回来了~动态规划难想不到dp[i] 表示以第i 个字符为结尾的最长连续的括号长度如果 s[i] = ‘(’那么dp[i] = 0如果 s[i] = ‘)’那么就需要分情况来判断如果 s[i - 1] =’(’那么 dp[i] = dp[i - 2] + 2 这里需要满足 i - 2 >= 0 如果不满足的话那么dp[i] = 2。如果s[i - 1] = ‘)’那么需要判断 第 i - dp[i - 1] - 1 这个位置是否为‘(’ ,如果原创 2021-04-12 16:15:08 · 53 阅读 · 0 评论 -
leetcode10. 正则表达式匹配
题解动态规划这道题还是相对来说比较难一些的,动态规划,其实就是剪枝搜索,搜索s的前i 个字符和 p 的前j 个字符是否相匹配题解在代码的注释中详细给出,建议打一遍代码仔细理解一下,要把情况考虑全。。。感觉思路真的是挺难想的。。。class Solution {public: bool isMatch(string s, string p) { int m = s.length() + 1; int n = p.length() + 1; v原创 2021-03-14 10:53:33 · 74 阅读 · 0 评论 -
leetcode 5. 最长回文子串
题解其实暴力也可以解的,但是觉得会比动态规划还要麻烦本文采用的为动态规划解法,我觉得还是比较容易看懂的。dp方程如下判断i - j是否为回文串的dp方程如下dp[i][j]={1,if i = js[i]==s[j],else if j - i == 1s[i]==s[j]ands[i+1][j−1],else dp[ i ][ j ] = \begin{cases} 1, & \text {if $原创 2021-03-11 11:17:26 · 48 阅读 · 0 评论