当前位置: 首页 > news >正文

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.lryc.cn/news/403819.html

相关文章:

  • R语言优雅的把数据基线表(表一)导出到word
  • XMl基本操作
  • Linux——Shell脚本和Nginx反向代理服务器
  • pyspark使用 graphframes创建和查询图的方法
  • 【web】-flask-简单的计算题(不简单)
  • Apache Sqoop
  • 【Python】TensorFlow介绍与实战
  • 第100+16步 ChatGPT学习:R实现Xgboost分类
  • 【操作系统】定时器(Timer)的实现
  • 鸿蒙Navigation路由能力汇总
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • 【iOS】APP仿写——网易云音乐
  • react 快速入门思维导图
  • 微软研究人员为电子表格应用开发了专用人工智能LLM
  • [算法题]两个链表的第一个公共结点
  • MySQL事务管理(上)
  • HTML2048小游戏
  • 为 android编译 luajit库、 交叉编译
  • 【音视频】音频重采样
  • 卷积神经网络学习问题总结
  • 嵌入式面试总结
  • 超简单安装指定版本的clickhouse
  • FlowUs横向对比几款笔记应用的优势所在
  • 收银系统源码-千呼新零售收银视频介绍
  • 从Catalog说到拜义父-《分析模式》漫谈11
  • Qt判定鼠标是否在该多边形的线条上
  • 【笔记:3D航路规划算法】一、随机搜索锚点(python实现,讲解思路)
  • ubuntu如何彻底卸载android studio?
  • 使用Windows Linux 子系统安装 Tensorflow,并使用GPU环境
  • C++案例三:猜数字游戏