leetcode每日一练-第70题-爬楼梯

news2024/12/23 0:25:52

 

一、思路

动态规划

二、解题方法

使用一个动态规划数组 dp 来记录到达每个台阶的不同方法数。初始情况下,当台阶数为 1 时,方法数为 1,当台阶数为 2 时,方法数为 2。然后,我们从第 3 阶开始逐步计算每一阶的方法数,方法数等于前一阶和前两阶方法数之和。最终,我们返回 dp[n],即到达 n 阶台阶的不同方法数。

三、code

class Solution {
public:
    int climbStairs(int n) {
        if(n<=2)
        {
            return n;
        }
        vector<int> dp(n+1,0);//使用一个动态规划数组 dp 来记录到达每个台阶的不同方法数
        //是一个用来存储动态规划状态的向量(数组),其中 n + 1 是数组的大小,初始化值都为 0。
        //在动态规划中,状态通常用一个数组(或向量)来表示,每个元素对应不同状态的解。在这个例子中,dp 数组的长度是 n + 1,表示有 n + 1 个不同的状态,索引从 0 到 n。
        dp[1]=1;
        dp[2]=2;
        //在动态规划的过程中,你会填充 dp 数组,其中 dp[i] 表示到达第 i 阶楼梯的不同方法数。最终,当你求解完整个数组后,你需要返回 dp[n],即到达楼顶的不同方法数。
        for(int i=3;i<=n;++i)
        {
            dp[i]=dp[i-1]+dp[i-2];//从第 3 阶开始逐步计算每一阶的方法数,方法数等于前一阶和前两阶方法数之和
        }
        return dp[n];//dp[n] 表示到达楼顶的不同方法数,其中 n 是楼梯的总阶数

    }
};

=========================================================================学到的知识:

① 

动态规划(Dynamic Programming,简称 DP)是一种解决问题的算法思想,通常用于求解具有重叠子问题和最优子结构性质的问题。它通过将问题分解为子问题并存储子问题的解,以避免重复计算,从而提高算法的效率。

动态规划常用于求解最优化问题,比如最短路径、最长公共子序列、背包问题等。它的核心思想是将原问题拆分为更小的子问题,然后通过解决子问题来解决原问题。在解决子问题时,动态规划会使用一种记忆化的方法,将子问题的解保存在数据结构中,以便后续直接获取,避免重复计算。

动态规划通常分为自顶向下和自底向上两种方式:

  1. 自顶向下:从大问题开始,逐步分解为子问题,然后通过递归或记忆化搜索来解决子问题。

  2. 自底向上:从小问题开始,逐步构建出更大的问题的解,通常采用迭代的方式,从子问题的解推导出原问题的解。

动态规划在算法设计和优化中具有广泛应用,能够有效地提高问题的求解效率,但也需要合理的状态定义、状态转移方程和边界条件来确保正确性。

vector<int> dp(n + 1, 0); 是一个用来存储动态规划状态的向量(数组),其中 n + 1 是数组的大小,初始化值都为 0

在动态规划中,状态通常用一个数组(或向量)来表示,每个元素对应不同状态的解。在这个例子中,dp 数组的长度是 n + 1,表示有 n + 1 个不同的状态,索引从 0n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指Offer12.矩阵中的路径 C++

1、题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平…

vue去掉所有输入框两边空格,封装指令去空格,支持Vue2和Vue3,ElementUI Input去空格

需求背景 就是页面很多表单输入框&#xff0c;期望在提交的时候&#xff0c;都要把用户两边的空格去掉 ❌使用 vue 的指令 .trim 去掉空格 中间会输入不了空格&#xff0c; 比如我想输入 你好啊 中国, 这中间的空格输入不了&#xff0c;只能变成 你好啊中国 ❌在提交的时候使用…

[HDLBits] Exams/m2014 q4i

Implement the following circuit: module top_module (output out);assign out1b0; endmodule

适配器模式来啦

网上的大多数的资料中适配器模式和代理模式都是紧挨着进行介绍的&#xff0c;为什么呢&#xff1f;&#xff1f;&#xff1f; 是因为适配器模式和代理模式有太多的相似之处&#xff0c;可以进行联动记忆但是也要做好区分。 在菜鸟教程中&#xff0c;适配器模式的定义是作为两…

Intellij IDEA 导入 eclipse web 项目详细操作

Eclipse当中的web项目都会有这两个文件。但是idea当中应该是没有的&#xff0c;所以导入会出现兼容问题。但是本篇文章会教大家如何导入&#xff0c;并且导入过后还能使用tomcat运行。文章尽可能以图片的形式进行演示。我的idea使用的版本是2022.3.3版本。当然按正常来说版本之…

Flink源码之RPC

Flink是一个典型的Master/Slave分布式实时处理系统&#xff0c;分布式系统组件之间必然涉及通信&#xff0c;也即RPC&#xff0c;以下图展示Flink组件之间的关系&#xff1a; RPCGateWay 一般RPC框架可根据用户业务类生成客户端和服务器端通信底层代码&#xff0c;此时只需定…

基于Dlib库+SVM+Tensorflow+PyQT5智能面相分析-机器学习算法应用(含全部工程源码)+训练及测试数据集

目录 前言总体设计系统整体结构图系统流程图模型流程 运行环境Python 环境TensorFlow环境界面编程环境 模块实现1. 数据预处理2. 模型构建1&#xff09;定义模型结构2&#xff09;交叉验证模型优化 3. 模型训练及保存4. 模型测试1&#xff09;摄像头调用2&#xff09;模型导入及…

用Python批量复制文件,方法有9种,方便快捷

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 当我们复制一个文件时用复制粘贴就可以了&#xff0c;如果是多个文件呢&#xff1f; 就会很麻烦了&#xff01; 今天给大家介绍一下用Python批量复制文件&#xff0c;方法有九种&#xff01;希望对你有帮助 1. Shutil Copy…

Vue 整合 Element UI 、路由嵌套、参数传递、重定向、404和路由钩子(五)

一、整合 Element UI 1.1 工程初始化 使用管理员的模式进入 cmd 的命令行模式&#xff0c;创建一个名为 hello-vue 的工程&#xff0c;命令为&#xff1a; # 1、目录切换 cd F:\idea_home\vue# 2、项目的初始化&#xff0c;记得一路的 no vue init webpack hello-vue 1.2 安装…

【果树农药喷洒机器人】Part3:变量喷药系统工作原理介绍

本专栏介绍&#xff1a;免费专栏&#xff0c;持续更新机器人实战项目&#xff0c;欢迎各位订阅关注。 关注我&#xff0c;带你了解更多关于机器人、嵌入式、人工智能等方面的优质文章&#xff01; 文章目录 一、变量喷药系统工作原理二、液压通路设计与控制系统封装2.1液压通路…

kettle之Switch/Case 插件

Switch/Case 插件存在于转换中&#xff0c;用于进行分支选择 插件运行下一步的表输入中执行hivesql需选上下面红色方框的&#xff0c;否则Switch/Case分支不生效!

ts中interface自定义结构约束和对类的约束

一、interface自定义结构约束对后端接口返回数据 // interface自定义结构 一般用于较复杂的结构数据类型限制 如后端返回的接口数据// 首字母大写;用分割号隔开 interface Iobj{a:number;b:string } let obj:Iobj {a:1,b:2 }// 复杂类型 模拟后端返回的接口数据 interface Il…

uniapp之当你问起“tab方法触发时eventchange也跟着触发了咋办”时

我相信没有大佬会在这个问题上卡两个小时吧&#xff0c;记下来大家就当看个乐子了。 当时问题就是&#xff0c;点击tab头切换的时候&#xff0c;作为tab滑动事件的eventchange同时触发了&#xff0c;使得接口请求了两次 大概是没睡好&#xff0c;我当时脑子老想着怎么阻止它冒…

CVPR 2023 | 无监督深度概率方法在部分点云配准中的应用

注1:本文系“计算机视觉/三维重建论文速递”系列之一,致力于简洁清晰完整地介绍、解读计算机视觉,特别是三维重建领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, NeurIPS, ICLR, ICML, TPAMI, IJCV 等)。本次介绍的论文是:2023年,CVPR,…

备战秋招012(20230808)

文章目录 前言一、今天学习了什么&#xff1f;二、动态规划1.概念2.题目 总结 前言 提示&#xff1a;这里为每天自己的学习内容心情总结&#xff1b; Learn By Doing&#xff0c;Now or Never&#xff0c;Writing is organized thinking. 提示&#xff1a;以下是本篇文章正文…

鉴源实验室丨汽车网络安全攻击实例解析(二)

作者 | 田铮 上海控安可信软件创新研究院项目经理 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 引言&#xff1a;汽车信息安全事件频发使得汽车行业安全态势愈发紧张。这些汽车网络安全攻击事件&#xff0c;轻则给企业产品发布及产品…

docker容器监控:Cadvisor+InfluxDB+Grafana的安装部署

目录 CadvisorInfluxDBGrafan安装部署 1、安装docker-ce 2、阿里云镜像加速器 3、下载组件镜像 4、创建自定义网络 5、创建influxdb容器 6、创建Cadvisor 容器 7、查看Cadvisor 容器&#xff1a; &#xff08;1&#xff09;准备测试镜像 &#xff08;2&#xff09;通…

Jmeter —— jmeter设置HTTP信息头管理器模拟请求头

HTTP信息头管理器 HTTP信息头管理器是在有需要模拟请求头部的时候进行设置的&#xff0c;添加方式 是 右击线程组 -- 配置元件 -- HTTP信息头管理器 可以通过抓包工具或者F12获取http请求的header头部信息&#xff1b;如下图&#xff1a; 复制并点击jmeter中的从剪贴板添加&am…

Linux基础开发工具之Linux自动项目构建工具的使用

目录 前言 1.make/makefile 1.1 依赖关系/依赖方法 2.原理 3.项目清理 4.make的执行问题 5.相关简单的符号介绍 总结 前言 之前给大家介绍了我们在开发过程中所需要使用到的编辑器vim&#xff0c;以及编译器gcc/g的使用&#xff0c;但是我相信大家在使用过程会发现我们在…

报错注入(主键重复)攻击原理

基本原理 利用数据表中主键不能重复的特点&#xff0c;通过构造重复的主键&#xff0c;使得数据库报错&#xff0c;并将报错结果返回到前端。 SQL说明函数 以pet数据表为例进行说明 rond(): 返回[0,1)区间内的任意浮点数。 count(): 返回每个组的列行数。 如&#xff0…