70. 爬楼梯【 力扣(LeetCode) 】

一、题目描述

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

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

二、测试用例

示例 1:

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

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1+ 1+ 12. 1+ 23. 2+ 1

二、解题思路

  1. 基本思路:记爬 2 个台阶的个数为 k ,该题目可以转化为计算 k = 0,1,2,…,的方案数,例如:k = 0,表示每次只爬一个台阶,方案数为 C n − k k = C n 0 = 1 C_{n-k}^k=C_n^0=1 Cnkk=Cn0=1 ;k = 1 ,表示有一次是爬两个台阶,其他都是爬一个台阶,方案数就是 C n − k k = C n − 1 1 = n − 1 C_{n-k}^k=C_{n-1}^1=n-1 Cnkk=Cn11=n1 ,依次类推,总方案数就是 ∑ k = 0 n 2 C n − k k \sum_{k=0}^{\frac n2}C_{n-k}^k k=02nCnkk
  2. 具体思路:
    • 暴力解:写一个函数计算 C n k = n ( n − 1 ) ⋯ ( n − k + 1 ) k ! C_n^k=\frac{n(n-1)\cdots(n-k+1)}{k!} Cnk=k!n(n1)(nk+1)
    • 动态规划:计算 C n k C_n^k Cnk 表,其中 C n k = C n − 1 k − 1 + c n − 1 k C_n^k=C_{n-1}^{k-1}+c_{n-1}^k Cnk=Cn1k1+cn1k

三、参考代码

3.1 暴力解

时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( 1 ) O(1) O(1)

数据可能会溢出

// 计算cnk,k 表示爬 2 个楼梯的个数,n 表示楼梯总数 - k
int c(int k,int n){long long int a=1,b=1;for(int i=0;i<k;i++){a*=n-i;b*=k-i;}return a/b;
}int climbStairs(int n) {int sum=0;for(int i=0;2*i<=n;i++){sum+=c(i,n-i);}return sum;
}

3.2 动态规划

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

const static int max=45;
long c[max+1][max+1];
// dp方法,核心是 c[n][k]=c[n-1][k-1]+c[n-1][k]
void compute_c(){for(int i=0;i<=max;i++){  c[i][0]=c[i][i]=1;}for(int n=1;n<=max;n++){for(int k=1;k<n;k++){c[n][k]=c[n-1][k-1]+c[n-1][k];}}
}
int climbStairs(int n) {int sum=0;compute_c();for(int i=0;2*i<=n;i++){sum+=c[n-i][i];}return sum;
}

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

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

相关文章

CUDA编程00 - 配置CUDA开发环境

第一步&#xff1a; 在一台装有Nvidia显卡和驱动的机器上&#xff0c;用nvidia-smi命令查看显卡所支持cuda版本 第二步&#xff1a; 到Nvidia官网下载CUDA Toolkit并安装&#xff0c;CUDA Toolkit Archive | NVIDIA Developer 安装时按提示下一步即可&#xff0c;安装完成用 …

【端智能】端智能技术演进与实践

什么是端智能技术 端智能&#xff08;On-Device Machine Learning&#xff09;是指把机器/深度学习算法模型应用和部署到端设备上&#xff0c;这里“端设备”是相对于云服务而言的&#xff0c;可以是手机&#xff0c;也可以是物联网IoT设备。 Google对端智能的介绍&#xff1…

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.2 业务处理系统-解读

教材中,一会儿“业务处理系统”,一会儿“事务处理系统”,语法毛病一堆。真是清华的水平!!! 系统架构设计师教程 第3章 信息系统基础知识-3.2 业务处理系统 3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能3.2.2.1 数据输入3.2.2.2 数据处理3.2.2.2.1 批处理 (Batch …

计算机体系结构||指令的调度和延迟分布(3)

实验3 指令的调度和延迟分布 3.1实验目的 &#xff08;1&#xff09;加深对指令调度技术的理解。 &#xff08;2&#xff09;加深对延迟分支技术的理解。 &#xff08;3&#xff09;熟练掌握用指令调度技术来解决流水线中的数据冲突的方法。 &#xff08;4&#xff09;进一…

使用AI给编程赋能

传送门&#xff1a;https://www.bilibili.com/video/BV1pf421B71v?p23&vd_source092ecb16e8482a7243d0f8f7718c31a2 1. AIGC AI&#xff08;Artificial Intelligence&#xff09;&#xff1a;人工智能&#xff0c;是计算机科学体系下的一个学科&#xff0c;是指通过计算机…

c# 开发AutoCAD扩展

在C#中开发AutoCAD扩展涉及使用AutoCAD的.NET API&#xff0c; 利用AutoCAD的功能并创建自定义命令、对话框、块、图层和其他图形元素。以下是一些关键步骤和概念&#xff0c;可以帮助你开始使用C#开发AutoCAD扩展&#xff1a; 准备开发环境 安装AutoCAD&#xff1a;确保你有一…

在 macOS 上使用 Jadx 进行 APK 反编译

在 macOS 上使用 Jadx 进行 APK 反编译 Jadx 是一个流行的开源工具&#xff0c;用于将 Android APK 文件反编译成 Java 源代码。本文将详细介绍如何在 macOS 上安装和使用 Jadx&#xff0c;包括之前讨论的内容和步骤。 1. 安装 Jadx 在 macOS 上&#xff0c;可以通过 Homebr…

lua 游戏架构 之 SceneLoad场景加载(一)

设计一个为BaseSceneLoad class&#xff0c;用于处理场景加载的相关操作 &#xff0c;主要作用是提供了一个通用的场景加载框架&#xff0c;使得子类可以按照统一的接口进行场景加载操作。子类需要实现这些方法&#xff0c;以便在加载场景时能够正确地处理场景加载的各个阶段。…

【Linux】线程互斥和同步

目录 线程互斥 相关概念 互斥量mutex 互斥量的接口 初始化互斥量 销毁互斥量 互斥量加锁/解锁 可重入VS线程安全 概念 可重入与线程安全的联系 可重入与线程安全的区别 死锁 死锁的四个必要条件 避免死锁 避免死锁的算法 线程同步 条件变量 条件变量函数 初始…

语义分割——为什么单通道8bit灰度图像能显示多种色块???

目录 一、问题二、解答2.1 标签图的实际存储格式2.2 标签图的显示颜色2.3 颜色映射示例 三、应用颜色映射3.1 OpenCV显示标签图3.2 Matplotlib显示标签图 四、总结 一、问题 大家在做语义分割时不知道有没有这样的疑惑&#xff0c;使用打标签工具后&#xff0c;标签图是单通道…

项目收获总结--大数据量存储架构设计方案

项目收获总结--大数据量存储架构设计方案 一、背景二、数据存储层技术选型2.1 MySQL2.2 MongoDB2.3 HBase2.4 HBaseElasticSearch 三、HBaseElasticSearch基本原理3.1 前置考虑3.2 HBaseElasticSearch优点3.3 HBaseElasticSearch缺点 四、HBaseElasticSearch数据一致性架构4.1 …

大语言模型-Transformer-Attention Is All You Need

一、背景信息&#xff1a; Transformer是一种由谷歌在2017年提出的深度学习模型。 主要用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;特别是序列到序列&#xff08;Sequence-to-Sequence&#xff09;的学习问题&#xff0c;如机器翻译、文本生成等。Transfor…

【UE5】可反射的射线检测

目录 效果 步骤 一、准备射线 二、生成第一次反射后的射线 三、多次反射 四、通过循环进行多次反射 效果 步骤 一、准备射线 1. 新建一个工程&#xff0c;添加一个俯视角游戏资源包 2. 双击打开俯视角游戏地图 删除大纲中的后期处理体积使得地图可以正常显示 3. 添加一…

SAP批量报工源码

SAP批量报工源码,适用于工序少的情景。 *&---------------------------------------------------------------------* *& Report ZPPR106 *& *&---------------------------------------------------------------------* *& *& *&--------------…

网络编程中的TCP和UDP

什么是TCP协议 TCP( Transmission control protocol )即传输控制协议&#xff0c;是一种面向连接、可靠的数据传输协议&#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接 &#xff1a;数据传输之前客户端和服务器端必须建立连…

web学习笔记(八十二)uniapp

目录 1.介绍uniapp 2.uniapp项目结构 3.自定义tabBer 4.uniapp条件编译 使用方法 5.uniapp的路由跳转 &#xff08;1&#xff09;js跳转 &#xff08;2&#xff09;标签跳转 获取参数 6.生命周期 6.1 全局生命周期 6.2 页面生命周期 1.介绍uniapp uniapp是一个基于…

Aouth2单点登录

信息来源B站 不改bug早点睡&#xff0c;北冥 时序图 -----------------------------总结描述 总体流程 浏览器 - 系统1 - 系统2 - 认证中心(SSO) 访问系统1 浏览器&#xff0c;访问系统1&#xff0c;询问认证中心是否登录 未登录&#xff0c;重定向一个登录页面返回给浏…

(二)原生js案例之数码时钟计时

原生js实现的数字时间上下切换显示时间的效果&#xff0c;有参考相关设计&#xff0c;思路比较难&#xff0c;代码其实很简单 效果 代码实现 必要的样式 <style>* {padding: 0;margin: 0;}.content{/* text-align: center; */display: flex;align-items: center;justif…

光盘防水嘛 ? DVD+R 刻录光盘泡水实验

首发日期 2024-07-20, 以下为原文内容: 同志们好, 欢迎来到 胖喵穷人实验室 ! 这里专注于 低成本, 低难度, 低风险 的 “三低” 小实验. 胖喵穷人实验室 (PM-PLab-E)正式名称: 紫腹巨蚊 (Toxorhynchites gravelyi) 系列穷人 (Poor people) 实验室风险警告: 低风险并不是零风险…

Python面试题:使用Python进行元编程:元类和元编程技巧

在 Python 中&#xff0c;元编程是一种编程技巧&#xff0c;它涉及到代码本身的结构和行为的编程。元编程允许你编写能够操作、修改或生成代码的代码。最常见的元编程技术包括使用元类、装饰器和类装饰器。以下是对 Python 元编程的详细讲解&#xff0c;包括元类和一些常用的元…