代码随想录算法训练营第三十八天| 509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

发布时间:2024年01月18日

代码随想录算法训练营第三十八天| 509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

题目

509.斐波那契数

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 01 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

给定 n ,请计算 F(n)

# 递归
class Solution:
    def fib(self, n: int) -> int:
        if n == 1 or n == 0:
            return n
        else:
            return self.fib(n - 1) + self.fib(n - 2)
# 动归
class Solution:
    def fib(self, n: int) -> int:
        # 这个判断只要是防止当n=1时,下面对dp[1]赋值导致数组越界
        # if n == 0:
        #     return 0
        # dp = [0] * (n + 1)
        # 或者直接多开一个位置
        dp = [0] * (n + 2)
        dp[0], dp[1] = 0, 1
        for i in range(2, n + 1):
            dp[i] = dp[i - 1] + dp[i - 2]
        return dp[n]

题目

70.爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

class Solution:
    def climbStairs(self, n: int) -> int:
        dp = [0] * (n + 2)
        dp[1], dp[2] = 1, 2
        for i in range(3, n + 1):
            dp[i] = dp[i - 1] + dp[i - 2]
        return dp[n]

题目

746.使用最小花费爬楼梯

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        dp = [0] * (len(cost) + 1)
        if len(cost) < 2:
            return 0
        for i in range(2, len(cost) + 1):
            dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
        return dp[len(cost)]
文章来源:https://blog.csdn.net/qq_46528858/article/details/135679248
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。