题目

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

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

注意:给定 n 是一个正整数。

示例 1:

输入: 2

输出: 2

解释: 有两种方法可以爬到楼顶。

1. 1 阶 + 1 阶

2. 2 阶

示例 2:

输入: 3

输出: 3

解释: 有三种方法可以爬到楼顶。

1. 1 阶 + 1 阶 + 1 阶

2. 1 阶 + 2 阶

3. 2 阶 + 1 阶

方法一:递归 + 数组

可以这样想,n个台阶,一开始可以爬 1 步,也可以爬 2 步,那么n个台阶爬楼的爬楼方法就等于 一开始爬1步的方法数 + 一开始爬2步的方法数,这样我们就只需要计算n-1个台阶的方法数和n-2个台阶方法数,同理,计算n-1个台阶的方法数只需要计算一下n-2个台阶和n-3个台阶,计算n-2个台阶需要计算一下n-3个台阶和n-4个台阶……

而我们可以很容易直到,1个台阶只有 1 种方法,2个台阶有 2 种方法。

我们还发现,在计算时会有大量重复计算,比如上面所说的:计算n要计算n-1和n-2,在计算n-1时要计算n-2和n-3,而n-2被重复计算了两遍,所以建立一个数组nums[n+1]来保存n个台阶的爬楼方法数,这样可以避免重复计算。

直到n-1<=2,n-2<=2时,可以直接求得n的个数,返回上一层递归。

Python3代码:

class Solution:

def climbStairs(self, n):

if n == 1:

return 1

if n ==2:

return 2

nums = [0,1,2]

for i in range(3,n):

nums.insert(i, 0)

Solution().climb(nums, n)

return nums[n]

def climb(self, nums, n):

x = n-1

y = n-2

if x > 2 and nums[x] == 0:

Solution().climb(nums, x)

if y > 2 and nums[y] == 0:

Solution().climb(nums, y)

nums.insert(n, nums[x]+nums[y])

方法二:斐波那契数列 1 2 3 5 8 13 21 ...

分析:

根据题意我们可以知道结果应该是斐波那契数列中的对应位置的数值

Python3代码:

class Solution:

def climbStairs(self, n):

a = b = 1

for i in range(n):

a, b = b, a + b

return a

python爬楼梯多少种_LeetCode70爬楼梯-Python3-两种方法实现相关推荐

  1. Python的pip怎样更新到最新版本:两种方法!

    Python的pip怎样更新到最新版本:两种方法! 方法一: 在管理员模式的控制台里输入下面这行命令 python -m pip install --upgrade pip 方法二: Anaconda ...

  2. controller 有两种写法,讨论一下两种写法的区别:

    controller 有两种写法,讨论一下两种写法的区别: 写法 1: app.controller('myCtrl', function($scope, $location) { $scope.my ...

  3. 微博社交内容信息爬取(selenium和equests请求接口两种方法)

    总体目标:抓取微博内容信息:给一个入口,抓分布抓取关注list,然后给到具体链接去爬取具体个人的微博信息 #我这现在有两种方式,selenium模拟登陆和下拉,二是分析接口获取具体微博信息,这边暂时没 ...

  4. python类的命名空间_Python之关于类变量的两种赋值区别详解

    我就废话不多说了,还是直接看代码吧! # -*- coding:utf-8 -*- #面试题,写一个方法,将一行字符串中所有的单词数量统计出来 class Person(object): TAG = ...

  5. 怎么在python中添加文字_Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

  6. Python中按值来获取指定键的两种方法

    Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...

  7. python import sql脚本_13-模块介绍-import两种方式-py文件的两种用途-模块搜索路径-项目开发的目录规范...

    1.模块的介绍与使用模块import 1.1.模块的介绍 1.1.1.什么是模块? 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能.在python中,模块的使用方式都是一样的,但其 ...

  8. python的运行方式有哪两种 有何区别_python程序的两种运行方式是什么

    python程序的两种运行方式是什么 第一种方式:REPL 所谓REPL即read.eva.print.loop(读取.计算.打印.循环),实现REPL运行方式有以下两种: 1.IDLE( 集成开发环 ...

  9. python实现强智科技教务系统抢课(两种方法)

    前言 又到了选课的时间,又一次被教务系统的预选给安排了,硬是一门都没选中.于是想实现有没有自动捡课的方法.就整体分为两种方法,一种是获取get请求然后由python多线程提交去选课,一种是利用自动化测 ...

  10. python 命名实体识别_命名实体识别的两种方法

    作者:Walker 目录 一.什么是命名实体识别 二.基于NLTK的命名实体识别 三.基于Stanford的NER 四.总结 一 .什么是命名实体识别? 命名实体识别(Named Entity Rec ...

最新文章

  1. 56 Node.js服务端开发入门
  2. iscroll动态加载数据完美解决方案
  3. [AGC014D] Black and White Tree(树形DP,博弈)
  4. java核心技术-NIO
  5. java 如何使用dylib,如何在应用程序中使用dylib文件?
  6. linux6.5能安装的firefox,Centos6.5安装firefox
  7. java单一窗体设计模式,JAVA中设计模式之 -- 单例模式
  8. 5G iPhone若推迟至10月发布 将会拉低苹果两个财季营收
  9. java 改为matlab_用面向对象的方法将一段JAVA代码转化为matlab
  10. NetBeans 时事通讯(刊号 # 67 - Aug 04, 2009)
  11. 深入浅出linux驱动,Linux Kernel 字符驱动的深入浅出讲解
  12. 【labelme】制作标签数据的完整流程
  13. 蓝色——网页效果图设计之色彩索引
  14. cosx sinx 泰勒展开 C++
  15. 7-2 平面向量加法 (15 分)
  16. 一张金融IC卡的交易流程(二)-----基本测试环境及借贷记交易流程(银联,交通部均为此流程)
  17. android 自定义特效,Android自定义View之高仿QQ健康
  18. 18650锂电池的充电规则
  19. (一) 三维点云课程---PCA介绍
  20. 【简单】LCP 02. 分式化简

热门文章

  1. Sublime text3 Version 3.2.1 3207 和 3.2.2 3211(2019-11-06亲测有效)
  2. 软件测试面试题(面试前准备篇)
  3. 利用laravel框架创建todos
  4. F - Ingenuous Cubrency ( UVa 11137 ,立方数之和,递推关系,算法进阶手册)
  5. PS学习总结二:色彩
  6. 在vue2项目中使用腾讯云IM及常见问题
  7. MSP430f149红外接收头——读任意红外遥控器键值并显示于数码管
  8. C语言练习①一英寸是多少厘米?
  9. 关于a标签 中特有的tilte属性 和 字符串文字换行
  10. 计算机的键盘怎么找出来,电脑的键盘隐藏了怎么办