爬楼梯(C++)

117 阅读1分钟

爬楼梯

假设你正在爬楼梯。需要 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 {
private:
    // 递归想要优化的话 关键是这里 动态规划
    long long int dp[50];
public:
    // 经典递归找规律题
    int climbStairs(int n) {
        
        // 递归最后一组数据过不了超时
        // if(n <= 2) 
        // {
        //     dp[n] = n;
        //     return n; 
        // }
        // if (dp[n] != 0) return dp[n];
        // return climbStairs(n - 1) + climbStairs(n - 2);
        if (n <= 2) return n;
        int left = 1, right = 2;
        for (int i = 3; i <= n; ++ i)
        {
            int t = left;
            left = right;            
            right = t + right;                    
        }
        return right;
    }
};