首页 > 其他 > 详细

计算爬楼梯不同步数的方法数

时间:2021-09-09 06:37:18      阅读:13      评论:0      收藏:0      [点我收藏+]

这个题目是这样的,如果一次可以向上移动1格或者2格,给出一定格数的梯子,有多少种移动方法可以刚好到顶。

比如给出2格梯子,有两种方法,一个是 1->1;还有是 一次 走2 格;

给出3格梯子,有三种方法,一个是1->1->1; 还有1->2, 还有2->1。

 

这个题目看起来好像很复制的样子,分析下,其实本质就是一个斐波拉契数组,一个n格的梯子方法数,可以是n-1 和n-2 的方法数之和。

 

代码也就很简单了,递归既可以,这里使用一个课程中提到的针对递归提速的缓存字典技巧;因为在递归分解时候,往往很多分解计算要跑很多次,把第一次的结果放在一个字典里面缓存使用可以大大提高速度。在实际使用中,可以使用functools.lru_cache这样工具,用装饰器形式更快捷的实现。实际提交代码后,显示运行速度也是超过85%的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
    cacheTable = {}
    def climbStairs(self, n: int-int:
        if == 1:
            return 1
        elif == 2:
            return 2
        else:
            if in self.cacheTable.keys():
                return self.cacheTable[n]
            else:
                stepCount = self.climbStairs(n-1+ self.climbStairs(n-2)
                self.cacheTable[n] = stepCount
                return stepCount

计算爬楼梯不同步数的方法数

原文:https://www.cnblogs.com/chenguopa/p/15239860.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!