一、 问题描述
二、算法思想
假设要爬上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、2和4,分别存储在变量a、b和c中。
- 从第四个阶梯开始,每次更新a、b和c的值,将a的值更新为b,将b的值更新为c,将c的值更新为a+b+c。
- 迭代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年前,其次就是现在
尽管努力就是了
你走的每一步都算数
!!!