力扣题目爬楼梯
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
我们可以先把前几组写出来
一阶楼梯:1种方法
两阶楼梯:2种方法
三阶楼梯:1+2=3种方法
四阶楼梯:2+3=5种方法
五阶楼梯:3+5=8种方法
六阶楼梯:5+8=13种方法......以此类推,我们发现规律:从第三项开始,前两个结果相加,第i项=第i-1项+第i-2项。这个规律与斐波那契数列类似,可用其思想求解,代码如下:
class Solution {
public:
int climbStairs(int n) {
int num1 = 1;
int num2 = 2;
int tep = 0;
if (n <= 2)
{
return n;
}
else
{
for (int i = 2; i < n; i++)
{
tep = num1 + num2;
num1 = num2;
num2 = tep;
}
return tep;
}
}
int main()
{
int n = 0;
printf("请输入一个正整数->");
scanf("%d", &n);
int a = climbStairs(n);
printf("%d\n", a);
system("pause");
return 0;
}
};
参考:CSDN博主be_gin_ner