509. 斐波那契数
题目描述
返回第 n 个斐波那契数
按照 dp 五部曲来
- 确定dp数组(dp table)以及下标的含义
- int[] dp = new int[n + 1];
- dp[i] 表示第 i 个 fib
- 确定状态转移方程:dp[i] = dp[i- 1] + dp[i - 2]
- 初始化:dp[0] = 0; dp[1] = 1;
- 确定遍历顺序:从左到右
- dp长度为9时 dp元素为:0、1、1、2、3、5、8、13、21
70. 爬楼梯
题目描述
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
和 509.斐波那契数很类似,当前台阶的步数可以由于前两个台阶之和决定。
即,当前台阶由前一步台阶跳一步而来或者由前两步台阶一次跳两步而来。
为什么不能由前两步台阶分别跳两个一步到当前台阶而来呢?
因为前两步台阶跳一步之后就到了当前台阶的前一步台阶,仍然相当于是从当前台阶的前一步台阶跳一步而来的。。。
746. 使用最小花费爬楼梯
dp 五部曲
- dp[i] 表示上第 i 层楼梯最小花费
- 状态转移方程 : dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
- 初始化: dp[0] = dp[1] = 0;
- 顺序:从左向右
- 打印日志
- 如果cost 为 {1, 100, 1, 1, 1, 100, 1, 1, 100, 1}
- 对应 dp 应为 {0, 0, 1, 2, 2, 3, 3, 4, 4, 5}
注意:
这里不能直接 return dp[len - 1],顶峰为最后一个元素后面,但是这里的 dp[n-1] 还没到达顶峰.
顶峰需要从 dp[n-1]再走一步,或者从dp[n-2]一次走两步
应该 return Math.min(dp[len - 1] + cost[len - 1], cost[len - 2] + dp[len - 2]);
全站分卷索引 · 42 卷
- 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
- 2找出所有子集的异或总和再求和
- 3哈希表
- 4哈希冲突
- 5红黑树与AVL树
- 6平衡二叉树(AVL树)
- 7将有序数组转换为二叉搜索树
- 83. 分割(组合问题)
- 9方法论
- 10509. 斐波那契数
- 1162. 不同路径
- 1296. 不同的二叉搜索树
- 13322. 零钱兑换
- 14爬楼梯
- 15背包小总结 (01背包、完全背包)
- 16子序列问题
- 17674. 最长连续递增序列
- 18115. 不同的子序列
- 19总结
- 20技巧总结
- 21时间序列模型
- 22区间DP模型
- 23664. 奇怪的打印机
- 24编辑距离
- 25回文串
- 26DP递推公式总结
- 27排序算法
- 28其他算法
- 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
- 302. TOP N问题
- 313. 分布式的TOP N问题
- 322. Astar数据结构 + 公式
- 334. 代码实现
- 345. 总体代码
- 35堆排序
- 36单源最短路
- 37思维导图
- 38链表
- 39回溯
- 40贪心
- 41动态规划
- 42排序