LeetCode 70 - 爬楼梯 - [递推+滚动优化]
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
设 表示跳上 级台阶的方案数目,因此很容易得到 ,这就是一个斐波那契数列。
我们可以用递推的方法 求出斐波那契数列求出第 项,然后由于每次递推只涉及到三个变量,所以我们用滚动优化的方式使得空间复杂度变成 。
AC代码:
class Solution { public: int climbStairs(int n) { if(n<=3) return n; int a[3]={1,1,2}; for(int i=3;i<=n;i++) a[i%3]=a[(i+1)%3]+a[(i+2)%3]; return a[n%3]; } };
当然,我们知道斐波那契数列是由通项公式的,我们可以用通项公式 地求第 项,当然需要注意一下double类型转成int类型时候的一些精度上的小问题。
AC代码:
inline int fibo(int n) { double res=1.0/sqrt(5); res*=pow((1.0+sqrt(5))/2.0,n)-pow((1.0-sqrt(5))/2.0,n); return (int)(res+1e-10); } class Solution { public: int climbStairs(int n) { return fibo(n+1); } };
转载请注明出处:https://dilthey.cnblogs.com/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
2018-04-26 POJ 1984 - Navigation Nightmare - [带权并查集]
2018-04-26 HDU 3038 - How Many Answers Are Wrong - [经典带权并查集]