力扣_爬楼梯

上班摸鱼,试试算法题摸摸鱼,题目如下:

复制代码
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
	输入:n = 2
	输出:2
解释:有两种方法可以爬到楼顶。
1 阶 + 1 阶
2 阶

示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1 阶 + 1 阶 + 1 阶
1 阶 + 2 阶
2 阶 + 1 阶
提示:
    1 <= n <= 45
    To reach nth step, what could have been your previous steps? (Think about the step sizes)
    要到达第n步,你之前的步骤是什么?(想想步长)

很明显如果要求10阶楼梯的答案需要求出9阶和8阶楼梯的答案,因此本题肯定是采用递归的方法来计算。假设n==10,那么func(10)=func(9)+func(8)...直到func(2)或者func(1)结束

下面是我第一次给出的答案

python 复制代码
class Solution:
    def climbStairs(self, n: int) -> int:
        if n >= 3:
            return self.climbStairs(n - 1) + self.climbStairs(n - 2)
        elif n == 2:
            return 2
        else:
            return 1

结果显示超过了时间的限制,有什么办法解决这个问题吗?在递归里面反复的计算了相同的内容,例如求func(3)的时候需要求func(2),求fun(4)时也需要求func(2)这就造成了时间的浪费,因此我们可以将一些计算结果存储下来减少计算量。

python 复制代码
class Solution:
    my_dict = {}

    def climbStairs(self, n: int) -> int:
        if self.my_dict.get(n) is not None:  # 先判断有没有计算过这个值
            return self.my_dict.get(n)
        tempResult = 0
        if n >= 3:
            tempResult = self.climbStairs(n - 1) + self.climbStairs(n - 2)
        elif n == 2:
            tempResult = 2
        else:
            tempResult = 1
        self.my_dict[n] = tempResult
        return tempResult
相关推荐
Severus_black7 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
2601_967987377 小时前
Python 教程:默认字典(defaultdict)全维度深度指南
python·性能优化·数据处理·collections·defaultdict
鱼听禅7 小时前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu
ZhengEnCi8 小时前
Agent 查不出代码 Bug 怎么办:一份带时间戳的调试日志与读日志排查流程
python·ai编程
威哥爱编程8 小时前
模拟面试智能体开发实战 05:给面试官接上题库和检索,题目结构化、大纲可溯源,AI 不再凭印象出题
python·agent·harmonyos
威哥爱编程8 小时前
模拟面试智能体开发实战 06:答得好怎么追问、答得错怎么点破,追问引擎让面试官会深挖会纠错
python·agent·harmonyos
codists9 小时前
《crafting interpreters》阅读笔记:4.6.2
python
2601_967979129 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔9 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
cpolar技术支持9 小时前
listen(5) 只排得住 5 个连接:第 6 个客户端卡在 connect 超时,进程活着端口却显示假活不放行
python·socket·tcp·cpolar·故障排查