leetcode高频问题-DP
AXIMI
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【leetcode高频问题-DP】70(Easy)Climbing Stairs
提交代码 class Solution { public int climbStairs(int n) { if(n==0||n==1||n==2) return n; int[] ways = new int[n]; ways[0] = 1; ways[1] =2; for(int i=2;i<n;i++) ...原创 2019-12-07 17:58:49 · 131 阅读 · 0 评论 -
【leetcode高频问题-DP】72(Hard)Edit Distance
问题描述 就是两个字符串word1和word2,通过加减、替换字母的方式,最少需要多少步可以从单词1变换到单词2 解题思路 假设两个字符串的长度分别为m和n,则创建长宽分别为m+1和n+1的二维数组 对于第一个字符串中的第i个字符和第二个字符串中的第j个字符: 当word1.charAt(i)==word2.charAt(j)时,dp[i+1][j+1]=dp[i][j] 当word1.charA...原创 2019-12-05 21:06:23 · 168 阅读 · 0 评论 -
【leetcode高频问题-DP】95.(Medium)Unique Binary Search Trees II
题目描述 给出数字n,要求返回所有1-n能能构成的二叉搜索树的根节点数组。 用递归 当输入为0时,输出是空数组 提交代码 class Solution { public List<TreeNode> generateTrees(int n) { if(n==0) return new ArrayList<TreeNode>(); re...原创 2019-12-03 20:43:22 · 201 阅读 · 0 评论 -
【leetcode高频问题-DP】10.(Hard) Regular Expression Matching
解题思路 这是一道非常巧妙的DP题 s是string一串字符串,p是pattern,是正则表达式模式。 解题的方法是建立一个二维dp数组,分成、(0,0)单个空、第一行、第一列、其他这4个部分去搞。 假设p的长度是m,s的长度是n,首先创建一个二维数组,长这个样子: 位置1:空字符串"“和空模式”“匹配,直接是true 位置2:字符串"mis"和空模式”“匹配,毫无疑问是false 位置3:空字...原创 2019-11-25 18:27:58 · 225 阅读 · 0 评论 -
【leetcode高频问题-动态规划】85.(Hard) Maximal Rectangle
解题思路 假设数组大小为m*n,数据如下: 过程是:遍历整个数组,遍历的顺序是从上到下,一排一排的遍历。 每遍历一排都要更新三个数组的数据,这三个数组分别是height[n], left[n], right[n] 每遍历一排都通过更新后的height, left, right中的数据计算一遍是否存在更大的矩阵 三个数组的含义如下: height[j]:遍历到某一行时,该行上连续的1的个数 例如对...原创 2019-11-01 21:57:05 · 514 阅读 · 0 评论 -
【leetcode高频问题-DP】53.(Easy) Maximum Subarray
解题思路 其实不用DP,用最简单的滑动窗口即可。 提交代码 class Solution { public int maxSubArray(int[] nums) { int curSum=nums[0],res=nums[0]; for(int i=1,len=nums.length;i<len;i++) { if(curSum+nums...原创 2019-10-31 19:55:49 · 173 阅读 · 0 评论
分享