动态规划(3)爬楼梯

    技术2022-07-15  85

    动态规划(3)爬楼梯

    题目

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    注意:给定 n 是一个正整数。

    示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。

    1 阶 + 1 阶2 阶

    示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 3. 1 阶 + 1 阶 + 1 阶 4. 1 阶 + 2 阶 5. 2 阶 + 1 阶

    解题思路

    逻辑分析:

    1.子问题 在本问题中,设f(x)为到达x阶楼梯的方法数。因为每次只能上升一阶或两阶楼梯,所以f(n)与f(n - 1)和f(n - 2)有关:

    对于楼梯阶数为n - 1的再上一阶就到n阶,所以贡献的方法数即为f(n - 1)对于楼梯阶数为n - 2的再上两阶就到n阶,所以贡献的方法数即为f(n - 2)

    2.转移方程 对于阶数n来说,根据上述分析其方法数f(n) = f(n - 1) + f(n - 2)

    代码

    python

    class Solution: def climbStairs(self, n: int) -> int: dp = [None] * (n + 1) dp[0] = 1 dp[1] = 1 for i in range(2,n + 1): dp[i] = dp[i - 1] + dp[i - 2] return dp[n]

    c++

    class Solution { public: int climbStairs(int n) { int *dp = new int[n + 1]; dp[0] = dp[1] = 1; for(int i = 2;i < n + 1;i++) { dp[i] = dp[i - 1] + dp[i - 2]; } return dp[n]; delete dp; } };
    Processed: 0.010, SQL: 9