博客
关于我
Leetcode|70. 爬楼梯【笔记】
阅读量:712 次
发布时间:2019-03-21

本文共 1679 字,大约阅读时间需要 5 分钟。

Leetcode|70. 爬楼梯【笔记】

链接

前言

表示不会做,先标记一下,这题应该很多知识要补

自己想的有点眉目,但是不知道如何实现出来

题目

假设你正在爬楼梯。需要 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 阶

关键

关键在于斐波那契数列,也就是得发现f(n) = f(n-1) + f(n-2)

但是没想到得出这种关系就能解题
** 第n层楼梯的方法由n-1层的方法和n-2层的方法组成**
- 因为n-1层方法再上1个台阶就是n层,n-2层方法再上2个台阶就也是n层;所以把二者加在一起就是n层的总方法

思路1

# 直接递归解法,容易超时,python可以加个缓存装饰器,这样也算是将递归转换成迭代的形式了# 除了这种方式,还有增加步长来递归,变相的减少了重复计算# 还有一种方法,在递归的同时,用数组记忆之前得到的结果,也是减少重复计算class Solution:    @functools.lru_cache(100)  # 缓存装饰器    def climbStairs(self, n: int) -> int:        if n == 1: return 1        if n == 2: return 2        return self.climbStairs(n-1) + self.climbStairs(n-2)
  • 缓存装饰器
    functools.lru_cache(maxsize=128, typed=False)
    • maxsize代表缓存的内存占用值,超过这个值之后,就的结果就会被释放,然后将新的计算结果进行缓存,其值应当设为2的幂
    • typed若为True,则会把不同的参数类型得到的结果分开保存
  • 递归:程序调用自身

思路2

# 直接DP,新建一个字典或者数组来存储以前的变量,空间复杂度O(n)class Solution:    def climbStairs(self, n: int) -> int:        dp = {   }        dp[1] = 1        dp[2] = 2        for i in range(3,n+1):            dp[i] = dp[i-1] + dp[i-2]        return dp[n]
  • {}表示字典

思路3?

# 还是DP,只不过是只存储前两个元素,减少了空间,空间复杂度O(1)class Solution:    def climbStairs(self, n: int) -> int:        if n==1 or n==2: return n        a, b, temp = 1, 2, 0        for i in range(3,n+1):            temp = a + b            a = b            b = temp        return temp

思路4?

# 直接斐波那契数列的计算公式喽class Solution:    def climbStairs(self, n: int) -> int:        import math        sqrt5=5**0.5        fibin=math.pow((1+sqrt5)/2,n+1)-math.pow((1-sqrt5)/2,n+1)        return int(fibin/sqrt5)

相关知识

疑问

  • 动态规划问题不太懂
  • 递归解法得了解
  • 斐波那契数列是啥

拓展

  • 完全背包问题

参考

转载地址:http://pgaez.baihongyu.com/

你可能感兴趣的文章
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>
Mysql中怎样设置指定ip远程访问连接
查看>>
mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
查看>>
Mysql中文乱码问题完美解决方案
查看>>
mysql中的 +号 和 CONCAT(str1,str2,...)
查看>>
Mysql中的 IFNULL 函数的详解
查看>>
mysql中的collate关键字是什么意思?
查看>>
MySql中的concat()相关函数
查看>>
mysql中的concat函数,concat_ws函数,concat_group函数之间的区别
查看>>
MySQL中的count函数
查看>>