1,题目要求
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
对于n阶的楼梯,一次可以爬一阶或者两阶楼梯,则一共有多少种爬楼梯的方法?
2,题目思路
这是一道非常典型的动态规划问题,所用的数学概型是斐波那契数列。
其实也非常好理解,当楼梯为2时,可以依次爬一个,也可以爬两个。利用一个vector来存储相应台阶的可以爬的种类数。
3,程序源码
class Solution {
public:
int climbStairs(int n) {
if(n<=2)
return n;
vector<int> res = {1,2};
for(int i=2;i<n;i++)
{
res.push_back(res[i-1]+ res[i-2]);//剩下一阶的种类数+剩下两阶的种类数。即爬到该阶的种类数
}
return res[n-1];
}
};