题目
- 每次可以爬 1 层,或者两层
- 当前在 0 层,返回到第 n 层,有多少种爬法
思路
- DP
- 到达当前 i 层的爬法数,为 i-1 的爬法数 + i-2 的爬法数
- 状态转移方程:vec[i] = vec[i-1] + vec[i-2];
- 初始化 0 层的爬法数为 1, 1 层的爬法数为 1
代码
class Solution {
public:
int climbStairs(int n) {
vector<int> vec(n+1);
vec[0] = 1;
vec[1] = 1;
for (int i = 2; i <= n; i++) {
vec[i] = vec[i-1] + vec[i-2];
}
return vec[n];
}
};