leetcode第509题python版斐波那契数列动态规划法

这篇博客讨论了如何使用动态规划算法解决爬楼梯问题,其中提到每个台阶可以一步或两步到达,重点在于状态转移方程的建立和迭代过程。作者提供了三种不同的实现方法,包括空间效率优化的动态规划、空间换时间以及递归解法,强调了动态规划在解决此类问题中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Solution:
    """
    70. 爬楼梯
    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
    """
    def climbStairs(self, n: int) -> int:
        # 和斐波那契数列类似,f1 = 1, f2 = 2, f3 = 3, 
        # 状态转义方程为f(n) = f(n-1) + f(n-2); 到达第n个台阶有两种方式,
        # 要么从第n-1台阶到达,要么从n-2台阶到达
        # 利用动态规划思想,将递推转化为迭代,缓存中间结果值
        # 1. 初始化及特殊处理
        if n == 1: return 1
        if n == 2: return 2
        f1 = 1
        f2 = 2

        # 2. 遍历 n-3+1 = n-2次
        for _ in range(n-2):
            f3 = f2 + f1
            f1 = f2
            f2 = f3

        # 3. 返回结果值
        return f3

        # 方法2:空间换时间
        # if n == 1: return 1
        # if n == 2: return 2
        # fn = [1] * n
        # fn[0] = 1
        # fn[1] = 2 
        # for i in range(2, n):
        #     fn[i] = fn[i-1] + fn[i-2] 
        
        # return fn[n-1]

        # 方法3:直接用递归会超时
        # if n == 1: return 1
        # if n == 2: return 2
        # return self.climbStairs(n-1) + self.climbStairs(n-2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ICPunk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值