D38| DP理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
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]
二刷补充
递归算法的性能分析(以斐波那契数列为例)
递归的时间复杂度计算:
时间复杂度 = 递归次数 * 每次递归的时间复杂度
对于递归次数:可以将递归抽象成二叉树,深度为m(第一层深度为1)的满二叉树的总节点数为 2^m - 1
递归算法的时间复杂度分析
(该文章以求解 x ^ n为例,来讲解如何求解时间复杂度,非常重要的面试题!!!)递归算法的空间复杂度计算:
空间复杂度 = 递归深度 * 每次递归的空间复杂度
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. 使用最小花费爬楼梯相关推荐
- 力扣算法 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
学习内容 力扣算法 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 具体内容 509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 ...
- 【力扣动态规划基础专题】:509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 62. 不同路径 63. 不同路径 II 343. 整数拆分 96. 不同的二叉搜索树
/** 动态规划专题:这是最简单的并且已经给出了转移方程,平时我们用dp[]数组来表示转移方程转移方程: dp[n] = dp[n-1]+dp[n-2]初始值:dp[0] = 0 , dp[1] = ...
- LeetCode-动态规划基础题-509. 斐波那契数
描述 题目如下: 509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0 ...
- 代码随想录算法训练营第三十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯。
Leetcode 509. 斐波那契数 题目链接:509. 斐波那契数 class Solution {public:int fib(int n) {if(n <= 1)return n;int ...
- 【快乐水题】509. 斐波那契数
原题: 力扣链接:509. 斐波那契数 题目简述: 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F( ...
- leetcode系列-509.斐波那契数
题目描述:斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 . 该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是:F(0) = 0,F(1) = 1 F(n) ...
- [leetcode]509. 斐波那契数
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0,F(1) = 1 F(n) = F(n ...
- leetcode 509. 斐波那契数
方法一:递归 使用递归计算给定整数的斐波那契数. 效率最差但是最简单的方法,会重复计算,就不实现了. 方法二:记忆化自底向上的方法 方法三:自底向上进行迭代 方法四:矩阵求幂 public class ...
- leetcode 509. 斐波那契数(dfs)
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0,F(1) = 1 F(n) = F(n ...
最新文章
- opencv文件路径问题
- 搜索引擎惩罚的五种最大原因
- C++语言程序设计之关联容器类型
- 让你更好使用Vista的设置技巧
- java 连接kafka_设置多个kafka连接接收器
- Python使用笔记总结目录
- 【入门2】分支结构 (今天刷洛谷了嘛)
- 开关造成的毛刺_LED射灯开关关了为什么还会闪
- 图像识别的工作原理是什么?商业上如何使用它?
- php嵌入wowza,Wowza服务器上的PHP脚本无法通过HTTP身份验证?
- vue结合element 输入框输入纯数字以及限制输入小数
- 《看美女不掉头发》【C语言】求一个数是否为素数的四种方法
- 智商太低,居然算不出病狗神题了
- 玄幻:开局选择瑶池,我只想默默签到!(三)
- C++进阶——内存管理(一)
- C++语言——求圆柱表面积
- 行业便携终端串口扩展方案
- 周末在家干什么?aiwi体感游戏让你轻松度假
- 03-Matplotlib数据可视化
- 如何避免服务器被攻击