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. mongodb 对象唯一索引_什么是MongoDB?简介,架构,功能和示例
  2. float64toint
  3. 独立式环境与宿主式环境————《标准C语言指南》读书笔记01
  4. electron打包
  5. unix-ln 命令
  6. 2021快手短剧数据报告
  7. 听说,他用报表关联数据库表,运维效率提升70%?
  8. 微软解释:关于Outlook 2007的争议
  9. chrome跨域插件_Chrome 插件开发入门
  10. python如何查询文件路径_Python使用os.listdir和os.walk获取文件路径
  11. [转]如何有效地记忆与学习
  12. Unity WebGL与IIS小坑
  13. HDU 4283 You Are the One(区间DP)
  14. python三大神器之fabric
  15. 标准c /c++宽字节与多字节的转换
  16. python重复命令_python系列的连接和重复操作
  17. ubuntu系统下如何查看opencv版本
  18. coap协议详解 服务器,COAP协议解析和简单打包实现
  19. [转]伸手摘星,未必如愿,但不会弄脏你的手……
  20. 一文读懂数据科学Notebook

热门文章

  1. iPhone/iPad应用使用麦克风的开启和关闭
  2. Peewee 使用手册
  3. ACM赛后总结2018.09.23
  4. nfc ntag21x ultralight 内存结构
  5. 64位服务器采购全攻略
  6. lcd与led的区别
  7. Virtualbox安装Kylin 10后调整屏幕分辨率无法选中保存按钮
  8. 计算机应用无法打开,为什么电脑界面的部分软件无法打开
  9. find()和findIndex()区别和用法
  10. JavaScript中的表格:文本域