DP理论基础

重要知识点:
1.动规和贪心的区别:动规是由前一个状态推导出来的,而贪心是局部直接选最优的
2.动规五部曲:
1)确定dp数组(dp table)以及下标的含义
2)确定递推公式
3)dp数组如何初始化
4)确定遍历顺序
5)举例推导dp数组

509. 斐波那契数

1.题目
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n)

2.实现
注意空间优化

class Solution:def fib(self, n: int) -> int:# dp[i]表示第i个数的函数值dp = {}dp[0], dp[1] = 0, 1# for i in range(2, n+1):#     dp[i] = dp[i - 1] + dp[i - 2]# return dp[n]# 优化:只需用两个数来记录前两项的数字:if n < 2:return dp[n]for i in range(2, n+1):tmp = dp[0] + dp[1]dp[0] = dp[1]dp[1] = tmpreturn dp[1]

二刷补充

递归算法的性能分析(以斐波那契数列为例)

  1. 递归的时间复杂度计算:
    时间复杂度 = 递归次数 * 每次递归的时间复杂度
    对于递归次数:可以将递归抽象成二叉树,深度为m(第一层深度为1)的满二叉树的总节点数为 2^m - 1
    递归算法的时间复杂度分析
    (该文章以求解 x ^ n为例,来讲解如何求解时间复杂度,非常重要的面试题!!!)

  2. 递归算法的空间复杂度计算:
    空间复杂度 = 递归深度 * 每次递归的空间复杂度

70. 爬楼梯

1.题目
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。

2.实现

class Solution:def climbStairs(self, n: int) -> int:dp = {}dp[1], dp[2] = 1, 2if n < 3:return dp[n]for i in range(3, n+1):tmp = dp[1] + dp[2]dp[1] = dp[2]dp[2] = tmpreturn dp[2]

3.拓展题目:
746. 使用最小花费爬楼梯

文章讲解

D38| DP理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯相关推荐

  1. 力扣算法 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

    学习内容 力扣算法 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 具体内容 509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 ...

  2. 【力扣动态规划基础专题】:509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 62. 不同路径 63. 不同路径 II 343. 整数拆分 96. 不同的二叉搜索树

    /** 动态规划专题:这是最简单的并且已经给出了转移方程,平时我们用dp[]数组来表示转移方程转移方程: dp[n] = dp[n-1]+dp[n-2]初始值:dp[0] = 0 , dp[1] = ...

  3. LeetCode-动态规划基础题-509. 斐波那契数

    描述 题目如下: 509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0 ...

  4. 代码随想录算法训练营第三十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯。

    Leetcode 509. 斐波那契数 题目链接:509. 斐波那契数 class Solution {public:int fib(int n) {if(n <= 1)return n;int ...

  5. 【快乐水题】509. 斐波那契数

    原题: 力扣链接:509. 斐波那契数 题目简述: 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F( ...

  6. leetcode系列-509.斐波那契数

    题目描述:斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 . 该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是:F(0) = 0,F(1) = 1 F(n) ...

  7. [leetcode]509. 斐波那契数

    斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0,F(1) = 1 F(n) = F(n ...

  8. leetcode 509. 斐波那契数

    方法一:递归 使用递归计算给定整数的斐波那契数. 效率最差但是最简单的方法,会重复计算,就不实现了. 方法二:记忆化自底向上的方法 方法三:自底向上进行迭代 方法四:矩阵求幂 public class ...

  9. leetcode 509. 斐波那契数(dfs)

    斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0,F(1) = 1 F(n) = F(n ...

最新文章

  1. opencv文件路径问题
  2. 搜索引擎惩罚的五种最大原因
  3. C++语言程序设计之关联容器类型
  4. 让你更好使用Vista的设置技巧
  5. java 连接kafka_设置多个kafka连接接收器
  6. Python使用笔记总结目录
  7. 【入门2】分支结构 (今天刷洛谷了嘛)
  8. 开关造成的毛刺_LED射灯开关关了为什么还会闪
  9. 图像识别的工作原理是什么?商业上如何使用它?
  10. php嵌入wowza,Wowza服务器上的PHP脚本无法通过HTTP身份验证?
  11. vue结合element 输入框输入纯数字以及限制输入小数
  12. 《看美女不掉头发》【C语言】求一个数是否为素数的四种方法
  13. 智商太低,居然算不出病狗神题了
  14. 玄幻:开局选择瑶池,我只想默默签到!(三)
  15. C++进阶——内存管理(一)
  16. C++语言——求圆柱表面积
  17. 行业便携终端串口扩展方案
  18. 周末在家干什么?aiwi体感游戏让你轻松度假
  19. 03-Matplotlib数据可视化
  20. 如何避免服务器被攻击

热门文章

  1. 厉害了!支付宝逆天升级,可一键撤回被骗转账 网友:干得好!
  2. 花狗C语言彩色贪吃蛇(完整代码)
  3. 高并发,如何提高并发量
  4. 【号外】马云这次帮了大忙,银行卡再也不用怕被盗刷!
  5. 批量修正字幕乱码(powershell)
  6. 解读APP新一代验证登录方式——一键登录/免密认证
  7. 电子商务计算机考研学校排名,电子商务考研院校排名
  8. 分享到微信,qq空间,微博
  9. 单个Java文件打成可执行JAR包
  10. 网络层路由选择协议(RIPOSF)