![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
小风_
致力于严谨、有趣的AI算法
展开
-
【动态规划】不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。链接:https://leetcode-cn.com/problems/unique-binary-search-trees/定义:dp[i]dp[i]dp[i]表示从节点为iii个的互不相同的二叉搜索树的种数边界条件:dp[0]=1,dp[1]=1,dp[2]=2dp[0]=1,dp[1]=1,dp[2]=2dp[0]=1,dp[1]=1,dp[2]=2,没有节.原创 2021-08-03 15:50:02 · 180 阅读 · 0 评论 -
【动态规划】杨辉三角
给定一个非负整数 *numRows,*生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。链接:https://leetcode-cn.com/problems/pascals-triangle/定义:dp[i][j]dp[i][j]dp[i][j]表示索引位置i,ji,ji,j的值边界条件:dp[0][0]=1,dp[1][0]=dp[1][1]=1dp[0][0]=1,dp[1][0]=dp[1][1]=1dp[0][0]=1,dp[1][0].原创 2021-08-02 16:28:57 · 278 阅读 · 0 评论 -
【动态规划】最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。参考链接https://leetcode-cn.com/problems/longest-increasing-subsequence/定义:dp[i]dp[i]dp[i]示从0到iii为止最长的递增子序列边界条件:dp[i]=1,idp[i]=1,idp[i]=1,i从000到N−.原创 2021-07-26 11:35:49 · 204 阅读 · 0 评论 -
【动态规划】三角形最小路径和
链接 https://leetcode-cn.com/problems/triangle/给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。定义:dp[i][j]dp[i][j]dp[i][j]表示从索引号(0,0)(0,0)(0,0)到索引号(i,j).原创 2021-07-22 15:19:14 · 88 阅读 · 0 评论 -
【动态规划】不同路径2
链接 https://leetcode-cn.com/problems/unique-paths-ii一个机器人位于一个 m x n 网格的左上角,机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?定义:dp[i][j]dp[i][j]dp[i][j]表示从索引号(0,0)(0,0)(0,0)到索引号(i,j)(i,j)(i,j)的路径走法的数量边界:第一行和第一列,dp[0][0]dp[0][0]dp[0][0].原创 2021-07-21 11:00:45 · 101 阅读 · 0 评论 -
【动态规划】不同路径
链接 https://leetcode-cn.com/problems/unique-paths/一个机器人位于一个 m x n 网格的左上角 。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径?定义:dp[i][j]dp[i][j]dp[i][j]表示从索引号(0,0)(0,0)(0,0)到索引号(i,j)(i,j)(i,j)的路径走法的数量边界:第一行和第一列,dp[0][0]dp[0][0]dp[0][0]只能是1。同时,由于只能下走或右走,因此第.原创 2021-07-21 10:51:52 · 77 阅读 · 0 评论 -
【动态规划】最小路径和
链接 https://leetcode-cn.com/problems/minimum-path-sum/给定一个包含非负整数的 m x n网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:**每次只能向下或者向右移动一步。定义:dp[i][j]dp[i][j]dp[i][j]表示从索引号(0,0)(0,0)(0,0)到索引号(i,j)(i,j)(i,j)的最小路径和边界:第一行和第一列,dp[0][0]dp[0][0]dp[0][0]只能是grid[0][0.原创 2021-07-20 10:41:27 · 146 阅读 · 0 评论 -
【动态规划】买卖股票的最佳时机
链接https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/定义:dp[i]dp[i]dp[i]表示当前可达到的最大的价格边界:dp[0]=0dp[0] = 0dp[0]=0状态转移方程:dp[i]=max(dp[i−1],nums[i]−PreMinPrice)dp[i] = max(dp[i-1], nums[i]-PreMinPrice)dp[i]=max(dp[i−1],nums[i]−PreMinPrice),Pr.原创 2021-07-19 09:42:46 · 78 阅读 · 0 评论 -
【动态规划】LCS最长公共子序列
链接 https://leetcode-cn.com/problems/longest-common-subsequence/定义:dp[i][j]dp[i][j]dp[i][j]表示字符串 a\operatorname aa 从索引 000 到索引 iii ,和字符串 b\operatorname bb 从索引 000 到索引 jjj 的最长公共子序列边界:第一行和第一列可以通过状态转移方程进行初始化状态转移方程:dp[i][j]={dp[i−1][j−1]+1,a[i]=b[j]max.原创 2021-07-18 11:46:34 · 101 阅读 · 0 评论 -
【动态规划】接雨水
leetcode链接https://leetcode-cn.com/problems/trapping-rain-water/给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。如下图,本题重要的不是动态规划的思想,而是几何思维解题的方法step1.从左向右遍历找到最大step2.从右向左遍历找到最大step3.加起来,并删去多余的部分定义:dp_left[i]表示从左向右当前最大值,dp_right[i]表示从右向左当前最大值边界:可不定.原创 2021-07-17 10:34:43 · 135 阅读 · 0 评论 -
【动态规划】最大子序列和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。例如:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。参考链接https://leetcode-cn.com/problems/maximum-subarray/动态规划定义:dp[i]dp[i]dp[i]表示从索引0开始到iii最大,如果是,True,否则,False边界条件:dp[0]=num.原创 2021-07-16 17:27:29 · 190 阅读 · 2 评论 -
【动态规划】最长回文子串
链接https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af定义:dp[i][j]dp[i][j]dp[i][j]表示iii到jjj是否为回文,如果是,True,否则,False边界条件:dp[i][i]=Truedp[i][i]=Truedp[i][i]=True状态转移方程:如果dp[left+1][right−1]dp[left+1][right-1]dp[left+1][right−1]为TrueTrueTrue.原创 2021-07-15 16:54:06 · 83 阅读 · 0 评论 -
【动态规划】爬楼梯
爬楼梯,一次性可以爬一阶或两阶,问爬n阶有多少种方法递归from functools import lru_cachefrom fastcache import clru_cache@lru_cache(32)def climb_stairs(n: int) -> int: fmt = "需要输入正数,然而你输入的是{}" assert isinstance(n, int) and n > 0, fmt.format(n) if n == 1: .原创 2021-07-15 16:31:59 · 79 阅读 · 0 评论 -
【动态规划】阶乘
a的阶乘表示从1开始连乘到a的值,注:0的阶乘为1递归from functools import lru_cache #缓存机制,加快速度from fastcache import clru_cache@lru_cache(32)def factorial(num: int) -> int: if num < 0: raise ValueError("不可为负数") return 1 if num in (0, 1) else num * fa.原创 2021-07-15 16:04:13 · 539 阅读 · 0 评论