Leetcode70. 爬楼梯(动态规划)

Leetcode原题

Leetcode70. 爬楼梯

标签

记忆化搜索 | 数学 | 动态规划

题目描述

假设你正在爬楼梯。需要 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 阶
提示:1 <= n <= 45

题目分析

我们用 f(x) 表示爬到第 x 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以我们可以列出如下式子:

f(x)=f(x−1)+f(x−2)

它意味着爬到第 x 级台阶的方案数是爬到第 x−1 级台阶的方案数和爬到第 x−2 级台阶的方案数的和。很好理解,因为每次只能爬 1 级或 2 级,所以 f(x) 只能从 f(x−1) 和 f(x−2) 转移过来,而这里要统计方案总数,我们就需要对这两项的贡献求和。

以上是动态规划的转移方程,下面我们来讨论边界条件。我们是从第 0 级开始爬的,所以从第 0 级爬到第 0 级我们可以看作只有一种方案,即 f(0)=1;从第 0 级到第 1 级也只有一种方案,即爬一级,f(1)=1。这两个作为边界条件就可以继续向后推导出第 n 级的正确结果。我们不妨写几项来验证一下,根据转移方程得到 f(2)=2,f(3)=3,f(4)=5,……,我们把这些情况都枚举出来,发现计算的结果是正确的。

我们不难通过转移方程和边界条件给出一个时间复杂度和空间复杂度都是 O(n) 的实现,但是由于这里的 f(x) 只和 f(x−1) 与 f(x−2) 有关,所以我们可以用「滚动数组思想」把空间复杂度优化成 O(1)。下面的代码中给出的就是这种实现。

题目实现

JAVA

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

在这里插入图片描述

C++

class Solution {
public:int climbStairs(int n) {int p = 0, q = 0, r = 1;for (int i = 1; i <= n; ++i) {p = q; q = r; r = p + q;}return r;}
};

C

int climbStairs(int n) {int p = 0, q = 0, r = 1;for (int i = 1; i <= n; ++i) {p = q;q = r;r = p + q;}return r;
}

GoLang

func climbStairs(n int) int {p, q, r := 0, 0, 1for i := 1; i <= n; i++ {p = qq = rr = p + q}return r
}

其他

相似题

  1. 使用最小花费爬楼梯 1358
  2. 统计构造好字符串的方案数 1694

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

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

相关文章

阿里云服务器安装MySQL(宝塔面板)

只写关键步骤 1. 创建一个云服务器实例 2 修改密码&#xff0c;登录服务器 3. 安装宝塔面板 进入https://www.bt.cn/new/index.html 进入宝塔面板地址 4. 安装Mysql 5. 创建数据库&#xff08;可导入数据库&#xff09; 6. 测试连接数据库 打开Navicat&#xff08;或其他数据…

谈谈 Python 中的 McNemar 检验(三)

前两个文章主要讲的是 McNemar 的原理&#xff0c;文章参考如下&#xff1a; 谈谈 Python 中的 McNemar 检验(一)-CSDN博客 谈谈 Python 中的 McNemar 检验(二)-CSDN博客 这一篇主要说一说 McNemar 的具体算法。 引用上面第一篇文章里的例子&#xff0c;关键是看数据 b 和 …

centos安装jdk的坑

文章目录 一、安装jdk二、查找jdk的目录三、配置JAVA_HOME 一、安装jdk 我们一般用yum search java | grep jdk查询可以安装的jdk 但是一定要注意如下图&#xff0c;必须知道jdk和jre的区别 yum install java-1.8.0-openjdk-devel.x86_64二、查找jdk的目录 用如下命令 sudo…

【C语言基础篇】字符串处理函数(七)字符转换函数

个人主页&#xff1a; 倔强的石头的博客 系列专栏 &#xff1a;C语言指南 C语言刷题系列 系列文章 【C语言基础篇】字符串处理函数&#xff08;一&#xff09;strlen的介绍及模拟实现-CSDN博客 【C语言基础篇】字符串处理函数&#xff08;二&#xff09;strcpy…

数仓项目总结--持续更新中

业务及需求调研 应详细调研业务流程&#xff0c;确定各个业务领域中业务线对应的业务模块&#xff0c;以及所有的业务活动。。进行需求调研&#xff0c;其一&#xff0c;提取出现有报表系统中的需求指标&#xff0c;其二与运营、分析人员沟通获知常用的需求指标。 开发过程中应…

基于Vue.js 实现简易拖拽指令

基于 Vue.js 实现简易拖拽指令 在 Web 开发中&#xff0c;拖拽功能是一项常见而又实用的功能。无论是制作网页游戏、实现可拖拽的组件&#xff0c;还是简单的页面布局调整&#xff0c;都可能用到拖拽功能。在 Vue.js 中&#xff0c;我们可以通过自定义指令的方式来实现拖拽功能…

Maven的基础知识和应用

一、Maven基础知识 1.项目对象模型&#xff08;POM&#xff09; POM&#xff08;Project Object Model&#xff09;是Maven项目的核心配置文件&#xff0c;通常是pom.xml文件。该文件使用XML格式&#xff0c;包含了项目的所有配置信息&#xff0c;例如项目的基本信息&#xf…

chrome 浏览器报错 This page will not function without javascript enabled

This page will not function without javascript enabled. Please enable javascript on your browser. 在访问公司spark history 页面时&#xff0c;发现页面加载不全&#xff0c;并提示如上报错&#xff0c;因此按照如下步骤&#xff0c;已解决问题。 在浏览器中启用 JavaS…

OpenLayers6实战,OpenLayers绘制五角星,OpenLayers绘制特殊图形,地图上画五角星

专栏目录: OpenLayers实战进阶专栏目录 前言 本章讲解如何使用OpenLayers6在地图上绘制五角星这种特殊图形的功能。 本章上一章基础上修改而成:OpenLayers6实战,OpenLayers绘制特殊图形,OpenLayers绘制四角形(菱形),OpenLayers绘制菱形 二、依赖和使用 "ol&q…

【APP_TYC】数据采集案例天眼APP查_抓包分析_②

追寻啊 你身影千年 恳请宿命怜 无尽日夜 只为见你一面 我愿化作 窗外的桑花 朝朝暮暮 都有我牵挂 无论冬雪秋沙 海角天涯 缱绻不尽 念你啊 倘若化作 林间的桑花 借一暖风 赠你梦如画 纵使悲忧如雪 一笑融化 &#x1f3b5; Joysaaaa《朝朝如念》 抓包分析 …

.NET开源免费、功能强大的 Windows 截图录屏神器

前言 今天大姚给大家分享一款.NET开源免费&#xff08;基于GPL3.0开源协议&#xff09;、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器&#xff1a;ShareX。 功能特性 ShareX 是一个开源的屏幕捕捉工具&#xff0c;具有丰富的功能特性&#xff0c;包括但不限于…

洗地机好用吗?哪款型号值得推荐?看完本文你就知道

在如今社会生活节奏不断加快的情况下&#xff0c;洗地机已经成为众多家庭的必备的清洁设备&#xff0c;面对市面上种类繁多的洗地机&#xff0c;我们常常会发出感叹“洗地机好用吗&#xff1f;洗地机哪个型好用&#xff1f;”等的疑问&#xff0c;今天&#xff0c;为了帮助大家…

vue2 export default写法,computed、methods的使用

<template><div><h2>{{nameAll}}</h2><h2>{{method}}</h2><h2>{{tt()}}</h2><h2>{{firstName}}</h2><h2>更新后赋值数据&#xff1a;{{lastName}}</h2><h2>赋值数据:{{writeValue}}</h2>…

chatgpt正面案例合集

现在可以用百度 百度安全验证 chatgpt用来搜索软件使用指令太牛了_个人渣记录仅为自己搜索用的博客-CSDN博客 chatgpt 使用案例 根据不同的目标群体变更文案和表达_个人渣记录仅为自己搜索用的博客-CSDN博客 倾听能力 和哪些基础能力相关 ,如何提高 chatgpt_个人渣记录仅为自…

el-select动态禁用

在一个el-form表单中有5个el-form-item; 每个el-form-item是一个el-select控件&#xff1b; 这5个el-select控件遵循这样的规则&#xff0c;都是使用同一个list集合&#xff0c;如果第一个el-select选择了list中的某一项&#xff0c;那么这一项就被禁用&#xff1b;其他的el-…

YOLOv9改进策略:注意力机制 | 二阶通道注意力机制(Second-order Channel Attention,SOCA),实现单图超分效果

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;CVPR_2019 SOCA注意力&#xff0c;一种基于二阶通道注意力机制&#xff0c;能够单幅图像超分辨率&#xff0c;从原理角度分析能够在小目标检测领域实现大幅涨点效果&#xff01;&#xff01;&#xff01; &am…

2024年3月腾讯云最新活动及优惠券整理汇总

随着云计算的普及&#xff0c;腾讯云作为国内领先的云计算服务提供商&#xff0c;为用户提供了丰富的产品和服务。为了帮助用户更好地了解和使用腾讯云&#xff0c;本文将为大家整理汇总2024年3月腾讯云的最新活动及优惠券信息。 1、腾讯云最新活动入口【点此直达】 2、腾讯云…

2024/03/27(C++·day3)

一、思维导图 二、完成下面类 代码 #include <cstring> #include <iostream>using namespace std;class myString { private:char *str; // 记录C风格的字符串int size; // 记录字符串的实际长度public:// 无参构造函数myString() : size(10){str new char[si…

双向最大匹配算法

1. 前向最大匹配算法 假定分词词典中最长词有M个汉字符&#xff0c;则被处理文档的当前字符串中前M个字作为匹配字段&#xff0c;查找词典。若字典中存在这样M个字组成的词&#xff0c;则匹配成功&#xff0c;匹配字段作为一个词切分出来&#xff1b;若匹配不成功&#xff0c;…