假设你正在爬楼梯。需要 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 <= n <= 45
class Solution {
public:
int climbStairs(int n)
{
if(n==1)//楼梯为1层或0层时,只有一种方式
return 1;
if(n==2)//楼梯为2层时,有两种方式,第一种为一次爬两个,第二种为爬一个,又爬一个
return 2;
int louti[n+1];//定义一个楼梯数组,代表爬到每层楼梯有多少种方法
louti[1]=1;
louti[2]=2;
for(int i=3;i<=n;i++)
{
louti[i]=louti[i-1]+louti[i-2];//当爬到第i层时候,就会等于前一层和前两层的和,好好想一下这个
//举例:当爬到第五层时候,可以在第三层选择爬两层,以及在第四层爬一层,就这两种可能,所以自然第五层的的方法就等于第三层+第四层的方法之和
}
return louti[n];
}
};