§1
题目描述
给定 n ,请计算 F(n) 。
n = 4
输出 = 3
§2
思路解析动画文字版
下面 9 步动画会按主解代码推进,而不是泛泛讲题型。
1. 读入 n:示例 n=6,要返回第 6 个斐波那契数 fib(6)。先把 fib(0)=0 填进表。
2. 初始化 a,b:初始化两个滚动变量:a=fib(0)=0,b=fib(1)=1。若 n<2 直接返回 n、不进循环。
3. 第1轮 → fib(2):循环第 1 轮(_=2):a,b = b, a+b,新 b = 0+1 = 1,得 fib(2)=1。
4. 第2轮 → fib(3):第 2 轮(_=3):新 b = 1+1 = 2,得 fib(3)=2;a 跟着前移到 1。
5. 第3轮 → fib(4):第 3 轮(_=4):新 b = 1+2 = 3,得 fib(4)=3。
6. 第4轮 → fib(5):第 4 轮(_=5):新 b = 2+3 = 5,得 fib(5)=5。
7. 第5轮 → fib(6):第 5 轮(_=6):新 b = 3+5 = 8,得 fib(6)=8。循环到 n 结束。
8. 准备返回:循环结束,b 里存的就是 fib(6)=8,返回 b。
9. 返回答案:返回 8。全程只用 a、b 两个变量滚动前进,空间 O(1)。
记住这题的代码骨架:题意约束先落到状态变量,再用循环或递归维护它。
§3
参考代码
class Solution: def fib(self, n): if n < 2: return n a = 0 b = 1 for _ in range(2, n + 1): a, b = b, a + b return b看懂代码不等于写得出。盖住上面,自己默写一遍试试。卡在哪一行说不清,就点右下角问小欧。
§4
复杂度
- 时间复杂度:O(n),从 2 推到 n
- 空间复杂度:O(1),两个变量
§5
易错点
✗ 错误写法:n=0 返回 1
✓ 正确写法:按定义返回 0
fib(0)=0
✗ 错误写法:递归不记忆化
✓ 正确写法:迭代 DP
裸递归指数复杂度
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
下一题 · 动态规划套路 5/29
→除数博弈
LeetCode 1025 · 简单 · 沿着 动态规划套路 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
299道动画图解
37节语音讲解
28课数据结构
¥0.27折合 / 天
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
¥99 开通年卡 →
想成体系刷透这类套路?去图解算法专题