爬楼梯

爬楼梯

Time Limit: 1000MS Memory Limit: 65536KB

Problem Description

小明是个非常无聊的人,他每天都会思考一些奇怪的问题,比如爬楼梯的时候,他就会想,如果每次可以上一级台阶或者两级台阶,那么上 n 级台阶一共有多少种方案?

Input

输入包含多组测试数据,对于每组测试数据:
输入只有一行为一个正整数 n(1 ≤ n ≤ 50)。

Output

对于每组测试数据,输出符合条件的方案数。
注意:64-bit 整型请使用 long long 来定义,并且使用 %lld 或 cin、cout 来输入输出,请不要使用 __int64 和 %I64d。

Example Input

2
4

Example Output

2
5
#include<stdio.h>
int main()
{
    int n,i;
    long long f[51];
    f[1]=1;
    f[2]=2;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=3;i<=n;i++)
        {
            f[i]=f[i-1]+f[i-2];
        }
        printf("%lld\n",f[n]);
    }
    return 0;
}

### Python实现爬楼梯问题的解决方案 在解决爬楼梯问题时,通常可以使用动态规划的方法。以下是一个完整的Python代码示例,用于计算爬到第n级楼梯的不同方法数。 ```python class Solution: def climbStairs(self, n: int) -> int: if n == 0 or n == 1: return 1 dp = [0] * (n + 1) dp[0], dp[1] = 1, 1 for i in range(2, n + 1): dp[i] = dp[i - 1] + dp[i - 2] return dp[n] ``` 上述代码中,`dp[i]` 表示到达第 `i` 级楼梯的方法数。由于每次只能爬一级或两级台阶,因此到达第 `i` 级台阶的方法数等于到达第 `i-1` 级和第 `i-2` 级台阶的方法数之和[^2]。 如果希望优化空间复杂度,可以通过只保留最近的两个状态来进一步简化代码: ```python class Solution: def climbStairs(self, n: int) -> int: if n == 0 or n == 1: return 1 prev1, prev2 = 1, 1 for i in range(2, n + 1): current = prev1 + prev2 prev2 = prev1 prev1 = current return prev1 ``` 在这个版本中,`prev1` 和 `prev2` 分别表示到达当前台阶和前一台阶的方法数,通过不断更新这两个变量,可以避免使用额外的数组存储所有状态[^2]。 ### 示例运行结果 假设输入 `n = 5`,则输出为 `8`,因为有以下八种不同的方法可以爬到第五级台阶: 1. 1 + 1 + 1 + 1 + 1 2. 2 + 1 + 1 + 1 3. 1 + 2 + 1 + 1 4. 1 + 1 + 2 + 1 5. 1 + 1 + 1 + 2 6. 2 + 2 + 1 7. 2 + 1 + 2 8. 1 + 2 + 2 #### 注意事项 - 如果输入的 `n` 值较小(如 `n=0` 或 `n=1`),可以直接返回 `1`,因为没有其他选择。 - 动态规划的核心思想是将问题分解为子问题,并通过递推关系逐步求解最终答案[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值