代码训练营第三十八天(Python)| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数
1、动态规划

class Solution:
    def fib(self, n: int) -> int:
        if n <= 1:
            return n
        # dp[i] 代表第 i 个数的斐波那契值
        dp = [0] * (n+1)
        dp[0] = 0
        dp[1] = 1
        for i in range(2, n+1):
            dp[i] = dp[i-1] + dp[i-2]
        return dp[-1]

2、优化动态规划

class Solution:
    def fib(self, n: int) -> int:
        if n <= 1:
            return n
        # dp[i] 代表第 i 个数的斐波那契值,只需要记录前 2 个值
        dp = [0, 1]
        dp[0] = 0
        dp[1] = 1
        for i in range(2, n+1):
            dp[0], dp[1] = dp[1], dp[0] + dp[1]
        return dp[1]

70. 爬楼梯
方法一

class Solution:
    def climbStairs(self, n: int) -> int:
        if n < 2:
            return n

        # dp[i] 代表爬到第i阶的方法
        dp = [0] * (n+1)

        dp[1] = 1
        dp[2] = 2

        for i in range(3, n+1):
            dp[i] = dp[i-1] + dp[i-2]

        return dp[n]

方法二

class Solution:
    def climbStairs(self, n: int) -> int:
        if n < 2:
            return n

        # 只需要记录 2 个状态
        dp = [1, 2]

        for i in range(3, n+1):
            dp[0], dp[1] = dp[1], dp[0] + dp[1]

        return dp[1]

746. 使用最小花费爬楼梯
1、动规

class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        n = len(cost)
        # dp[i] 代表爬上第 i 台阶的最低花费
        dp = [0] * (n+1)
        dp[0] = 0
        dp[1] = 0
        for i in range(2, n+1):
            dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
        return dp[n]

2、优化动规

class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        n = len(cost)
        # dp[i] 代表爬上第 i 台阶的最低花费
        # 只需记住前 2 步台阶的花费
        dp = [0, 0]
        dp[0] = 0
        dp[1] = 0
        for i in range(2, n+1):
            dpi = min(dp[1]+cost[i-1], dp[0]+cost[i-2])
            dp[0], dp[1] = dp[1], dpi
        return dp[1]
posted @   忆象峰飞  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示