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

news/2025/2/23 2:13:58/

文档链接:https://programmercarl.com/

LeetCode509.斐波那契数

题目链接:https://leetcode.cn/problems/fibonacci-number/

思路:

动规五部曲:

这里我们要用一个一维dp数组来保存递归的结果

1.确定dp数组以及下标的含义

dp[i]的定义为:第i个数的斐波那契数值是dp[i]

2.确定递推公式

为什么这是一道非常简单的入门题目呢?

因为题目已经把递推公式直接给我们了:状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];

3.dp数组如何初始化

4.确定遍历顺序

从递归公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,dp[i]是依赖 dp[i - 1] 和 dp[i - 2],那么遍历的顺序一定是从前到后遍历的

5.举例推导dp数组

按照这个递推公式dp[i] = dp[i - 1] + dp[i - 2],我们来推导一下,当N为10的时候,dp数组应该是如下的数列:

0 1 1 2 3 5 8 13 21 34 55

如果代码写出来,发现结果不对,就把dp数组打印出来看看和我们推导的数列是不是一致的。

动态规划:

class Solution {
public:int fib(int n) {if(n <= 1) return n;vector<int> dp(n + 1);dp[0] = 0;dp[1] = 1;for(int i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}
};

LeetCode70.爬楼梯

题目链接:https://leetcode.cn/problems/climbing-stairs/

思路:一步一步推到得出递推公式就好写很多。跟斐波那契数一样的。

动态规划:

class Solution {
public:int climbStairs(int n) {if(n <= 2) return n;vector<int> dp(n + 1);dp[1] = 1;dp[2] = 2;for(int i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}
};

LeetCode746.使用最小花费爬楼梯

题目链接:https://leetcode.cn/problems/min-cost-climbing-stairs/

思路:明确dp[i]表示的意义:到达第i阶所需的最小花费。楼顶不是cost.size() - 1而是cost.size()。

动态规划:

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {vector<int> dp(cost.size() + 1);dp[0] = 0;dp[1] = 0;for(int i = 2; i <= cost.size(); i++) {dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);}return dp[cost.size()];}
};

总结:为了备战蓝桥杯,跳着先刷动态规划了。贪心后面再补。


http://www.ppmy.cn/news/1412627.html

相关文章

开发语言漫谈-C#

C#的#&#xff0c;字面上的意思就是&#xff0c;也就是把C再。微软只所以搞C#就是要抗衡Java。微软当时搞了个J&#xff0c;被Java告了&#xff0c;没办法了只能另取炉灶。从纯技术角度来看&#xff0c;C#设计非常优秀&#xff0c;可以覆盖所有领域&#xff0c;是几乎唯一的全栈…

网络基础三——IP协议补充和Mac帧协议

全球网络及网段划分的理解 ​ 根据国家组织地区人口综合评估进行IP地址范围的划分&#xff1b; ​ 假设前8位用来区分不同的国家&#xff0c;国际路由器负责全球数据传输&#xff0c;子网掩码为IP/8&#xff1b;次6位区分不同的省份&#xff0c;国内路由器负责全国数据的传输…

log4j2远程代码执行漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程

读者只要保证你的站点目录里有Exploit.class就行&#xff0c;至于我目录里有啥其他的读者不用在意。接下来&#xff0c;我们在攻击机启动LDAP服务。这里使用工具marshalsec-0.0.3-SNAPSHOT-all.jar来快速开启&#xff0c;这个工具在我的上一篇博客中有提到&#xff0c;详情见 …

[Spark SQL]Spark SQL读取Kudu,写入Hive

SparkUnit Function&#xff1a;用于获取Spark Session package com.example.unitlimport org.apache.spark.sql.SparkSessionobject SparkUnit {def getLocal(appName: String): SparkSession {SparkSession.builder().appName(appName).master("local[*]").getO…

Vue.js组件精讲 组件的通信2:派发与广播——自行实现dispatch和broadcast方法

上一讲的 provide / inject API 主要解决了跨级组件间的通信问题&#xff0c;不过它的使用场景&#xff0c;主要是子组件获取上级组件的状态&#xff0c;跨级组件间建立了一种主动提供与依赖注入的关系。然后有两种场景它不能很好的解决&#xff1a; 父组件向子组件&#xff0…

2.Go的基本语法-指针、结构体、Map

1.指针 1.1.常规定义 func test24() {var a int 10var b *intb &afmt.Printf("a 的 值%d\n", a)fmt.Printf("a 的 指针地址%x\n", &a)fmt.Printf("b 的 值%d\n", *b)fmt.Printf("b 的 指针地址%x\n", b)打印var c *string…

React安装

React中文官网&#xff1a;快速入门 – React 中文文档 React英文官网&#xff1a;https://react.dev/learn React安装教程&#xff1a;https://www.jianshu.com/p/0784e619a186 一、环境配置 安装nodejs 下载网址&#xff1a;Node.js — Run JavaScript Everywhere 下载安…

js 基础作用域回顾以及数据类型的存放位置

作用域&#xff1a;一个变量生效的范围。主要区分为全局作用域和局部作用域。 注意&#xff1a;局部作用域只有函数能生成&#xff0c;其它的不行。 访问规则&#xff1a;就近原则。寻找变量首先在自己的作用域寻找&#xff0c;如果找不到&#xff0c;就向上一级寻找&#xf…