动态规划
我走路靠风
这个作者很懒,什么都没留下…
展开
-
不同的二叉搜索树
给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种? class Solution { public int numTrees(int n) { int[] dp = new int[n+1]; dp[0] = 1; dp[1] = 1; for(int i = 2; i <...原创 2020-04-07 17:47:04 · 98 阅读 · 0 评论 -
编辑距离
第一行,是word1为空变成word2最少步数,就是插入操作 第一列,是word2为空,需要的最少步数,就是删除操作 class Solution { public int minDistance(String word1, String word2) { int n1 = word1.length(); int n2 = wor...原创 2020-04-07 17:00:22 · 200 阅读 · 0 评论 -
爬楼梯
假设你正在爬楼梯。需要n阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定n是一个正整数。 public class Solution { public int climbStairs(int n) { if (n == 1) { return 1; } ...原创 2020-04-07 14:04:33 · 129 阅读 · 0 评论 -
最小路径和
给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 public class Solution { public int minPathSum(int[][] grid) { int[][] dp = new int[grid.length][grid[0].length]...原创 2020-04-07 13:45:16 · 150 阅读 · 0 评论 -
不同路径
class Solution { public int uniquePaths(int m, int n) { int[][] dp = new int[m][n]; for (int i = 0; i < n; i++) dp[0][i] = 1; for (int i = 0; i < m; i++) dp[...原创 2020-04-07 10:45:25 · 129 阅读 · 0 评论 -
最大子序和
给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 class Solution { public int maxSubArray(int[] nums) { int n = nums.length, maxSum = nums[0]; for(int i = 1; i < n; ++i) { if ...原创 2020-04-07 00:33:28 · 90 阅读 · 0 评论 -
最长有效括号
给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。 方法一:动态规划 Algorithm: 动态规划的题目一般分成三步: 1、确定状态,也就是你的答案表是存什么答案的。 2、确定状态转移方程,也就是怎么将你的答案表填满,换句话说,就是一些表达式。 3、确定边界情况,什么情况下有可能越界,要单独判断考虑(有可能无边界情况)。 int longes...原创 2020-04-06 23:34:55 · 113 阅读 · 0 评论 -
正则表达式匹配
给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 法一:动态规划 法二:递归 class Solution { ...原创 2020-04-06 16:12:10 · 174 阅读 · 0 评论 -
最长回文字符串
给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。 使用动态规划解决此问题的步骤: 1、定义一个二维数组bool dp[len-1][len-1]来记录遍历字符串所得的状态,dp[l][r]为true表示从l到r的子串为回文串,false表示不是回文串 2、初始化二维数组,单个字符为回文串,所以定义dp[i][i] = true 3、找到状态转移方程,...原创 2020-04-05 23:48:48 · 109 阅读 · 0 评论