力扣 70. 爬楼梯

62 阅读1分钟

🔗 leetcode.cn/problems/cl…

题目

  • 每次可以爬 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];
        
    }
};