算法资源库(3)爬楼梯问题

118 阅读1分钟

一、 问题描述  

 二、算法思想 

       假设要爬上n阶楼梯,我们可以将问题分解为子问题:爬到第n-1阶楼梯的方法数加上爬到第n-2阶楼梯的方法数加上爬到第n-3阶楼梯的方法数。

设f(n)表示爬到第n阶楼梯的方法数,则有递推关系:f(n) = f(n-1) + f(n-2) + f(n-3)。

对于n小于等于3的情况,可以直接返回相应的结果:

当n为1时,返回1;当n为2时,返回2;当n为3时,返回4。

对于n大于3的情况,可以使用迭代的方式来求解:

  1. 初始化前三个阶梯的方法数为1、2和4,分别存储在变量a、b和c中。
  2. 从第四个阶梯开始,每次更新a、b和c的值,将a的值更新为b,将b的值更新为c,将c的值更新为a+b+c。
  3. 迭代n-3次后,c的值即为爬到第n阶楼梯的方法数。

      最后,返回c的值即可得到爬到楼顶的方法数。

三、代码实现 

#include <stdio.h>

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

int main()
 {
    int n ;
    scanf("%d",&n);
    int result = climbStairs(n);
    printf("%d\n", result); // 输出结果
    return 0;
}

方法分析 

    这是一个动态规划问题。我们可以使用类似爬楼梯算法的思想来解决。

执行结果  

结语  

种一棵树最好的时间是10年前,其次就是现在

尽管努力就是了

你走的每一步都算数

!!!