算法工程师第二十八天(动态规划理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 )
创始人
2024-11-11 13:08:53
0

参考文献 代码随想录

一、斐波那契数

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

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

给定 n ,请计算 F(n) 。

示例 1:

输入:n = 2 输出:1 解释:F(2) = F(1) + F(0) = 1 + 0 = 1 

示例 2:

输入:n = 3 输出:2 解释:F(3) = F(2) + F(1) = 1 + 1 = 2 

示例 3:

输入:n = 4 输出:3 解释:F(4) = F(3) + F(2) = 2 + 1 = 3
class Solution(object):     def fib(self, n):         """         :type n: int         :rtype: int         """         if n == 0 or n ==  1:             return n         # 动态规划5部曲         dp = [0, 1]         for i in range(2, n + 1):             dp.append(dp[i - 2] + dp[i - 1])         return dp[n]

二、爬楼梯

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

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

示例 1:

输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶

示例 2:

输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 
class Solution(object):     def climbStairs(self, n):         """         :type n: int         :rtype: int         """         dp =[0, 1, 2]         for i in range(3, n + 1):             dp.append(dp[i - 1] + dp[i - 2])         return dp[n]  

三、使用最小花费爬楼梯

 

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

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

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

示例 1:

输入:cost = [10,15,20] 输出:15 解释:你将从下标为 1 的台阶开始。 - 支付 15 ,向上爬两个台阶,到达楼梯顶部。 总花费为 15 。 

示例 2:

输入:cost = [1,100,1,1,1,100,1,1,100,1] 输出:6 解释:你将从下标为 0 的台阶开始。 - 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。 - 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。 - 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。 - 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。 - 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。 - 支付 1 ,向上爬一个台阶,到达楼梯顶部。 总花费为 6 。
class Solution(object):     def minCostClimbingStairs(self, cost):         """         :type cost: List[int]         :rtype: int         """         dp = [0, 0]  # dp如何初始化,因为你可以选择下标0或者是1的开始调,所以在这2个的话费是0         # dp[i]代表的是在第几阶的最小花费         for i in range(2, len(cost) + 1):             dp.append(min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])) # 因为它可以眺1或者是2,所以要取一个最下值dp[i - 1] + cost[i - 1]当前dp[i - 1]的最小花费,加上它调出所需要的话费         return dp[len(cost)]

相关内容

热门资讯

专业辅助!微乐小程序自建房插件... 《专业辅助!微乐小程序自建房插件免费,微信边锋辅助工具(起初是真的有挂)》 微乐小程序自建房插件免费...
玩家必看教程!微乐陕西小程序破... 玩家必看教程!微乐陕西小程序破解器下载(开挂辅助教程)一直有透视经验1、每一步都需要思考,不同水平的...
推荐辅助!2025微乐小程序黑... 推荐辅助!2025微乐小程序黑科技,微信多乐辅助(一向有挂);推荐辅助!2025微乐小程序黑科技,微...
实测揭晓!潮汕潮汕娱脚本(揭露... 实测揭晓!潮汕潮汕娱脚本(揭露辅助神器)切实有透视教材1、打开软件启动之后找到中间准星的标志长按。2...
专业辅助!微乐小程序黑科技下载... 专业辅助!微乐小程序黑科技下载ios,蜀山四川破解版安卓版(一贯是真的有挂);1、很好的微乐小程序黑...
分享开挂内幕!微信广东雀神挂件... 分享开挂内幕!微信广东雀神挂件辅助(解迷辅助软件)总是有透视窍门1、下载好微信广东雀神挂件辅助脚本下...
发现辅助!微乐小程序辅助脚本,... 发现辅助!微乐小程序辅助脚本,广西老友麻将有挂吗(确实有挂),微乐小程序辅助脚本是用手机号来登录游戏...
揭秘真相!凑一桌游戏关春天辅助... 揭秘真相!凑一桌游戏关春天辅助(解谜辅助app)果然有透视窍门1、凑一桌游戏关春天辅助模拟器是什么优...
专业辅助!微乐小程序黑科技下载... 专业辅助!微乐小程序黑科技下载ios,微信牵手跑辅助下载(确实存在有挂);最新版2026是一款经典耐...
今日头条!卡农血拼辅助(必备辅... 今日头条!卡农血拼辅助(必备辅助攻略)原来有透视手筋亲,关键说明,卡农血拼辅助透视脚本安卓赛季回归,...