LeetCode:爬楼梯(C语言)
1、问题概述:每次可以爬 1 或 2 个台阶。有多少种不同的方法可以爬到楼顶
2、示例
示例 1:
输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶示例 2:
输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶
3、分析
(1)考斐波那契数列(第1个+第2个=第3个,依次类推):1 2 3 5……
公式: F(0)=0 F(1)=1 F(n)=F(n-1)+F(n-2)
(2)如果直接使用斐波那契数列进行递归的话时间复杂度回很高,会超出时间限制,所以对斐波那契数列进行优化,在外面设置3个变量,利用递推公式f(n) = f(n-1) + f(n-2)
4、代码
int climbStairs(int n) {
// 斐波那契数列 F(0)=0 F(1)=1 F(n)=F(n-1)+F(n-2)
// 1 2 3
if(n<=2){
return n;
}
long one=1;
long two=2;
long three=0;
for(long i=3;i<=n;i++){
three=one + two ;
one=two;
two=three;
}
return three;
}
原文地址:https://blog.csdn.net/m0_59246072/article/details/140608358
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!