爬楼梯(青蛙爬楼)

题目

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

该题有三种解法:递归分治、动态规划(dp)、斐波那契数列法。

动态规划做法:

分析

我们可以通过两部分爬到n阶台阶:

  • 通过 n-1阶台阶
  • 通过 n-2阶台阶

代码表示也就是:f(n)=f(n-1) + f(n-2)
在动态规划里,这个方程叫做转移方程,用来表示转移状态。

动态规划通常一分为三:

  • 初始化
  • 转移
  • 结束状态
就该题而言:
  1. 初始化:
    f(1)=1; //表示爬到第1阶台阶,有一种方法。
    f(2)=2; //表示爬到第2阶台阶,有两种方法。

  2. 转移:
    到第n阶台阶的方法数 = n-1阶台阶的方法数 + n-2阶台阶的方法数。
    因为每次你可以爬 1 或 2 个台阶,所以到第n阶时,需要计算n-1和n-2阶台阶的方法数。

  3. 结束状态:
    通常是算法结束的判断。
    该题只要计算出n阶的方法数,就算是结束。

代码

int climbStairs(int n) {
    int dp[100];
    dp[1]=1;
    dp[2]=2;
    for(int i = 3;i <= n; i++)
    {
        dp[i]=dp[i-1]+dp[i-2];
    }
    return dp[n];
}

题目链接:https://leetcode.cn/problems/climbing-stairs/description/?envType=study-plan-v2&envId=dynamic-programming

参考链接:
https://blog.csdn.net/qq_73900397/article/details/134608459

posted @ 2024-11-11 11:45  冷亦蓝  阅读(105)  评论(0)    收藏  举报