力扣_爬楼梯

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

复制代码
假设你正在爬楼梯。需要 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
相关推荐
先做个垃圾出来………4 小时前
如何培养自己工程化的能力(python项目)
开发语言·python
mortimer4 小时前
Hugging Face 下载模型踩坑记:从符号链接到网络错误
人工智能·python·ai编程
现在,此刻4 小时前
leetcode 11. 盛最多水的容器 -java
java·算法·leetcode
amazinging5 小时前
北京-4年功能测试2年空窗-报培训班学测开-第七十三天-投递简历-[特殊字符][特殊字符]
python·学习
☆璇5 小时前
【C++】哈希的应用:位图和布隆过滤器
算法·哈希算法
一株月见草哇7 小时前
Matlab(4)
人工智能·算法·matlab
IMER SIMPLE7 小时前
人工智能-python-机器学习-线性回归与梯度下降:理论与实践
人工智能·python·机器学习
hans汉斯7 小时前
基于深度学习的苹果品质智能检测算法研究
人工智能·深度学习·算法
胖墩会武术7 小时前
【图像处理】小波变换(Wavelet Transform,WT)
图像处理·python
火车叨位去19497 小时前
力扣top100(day01-05)--矩阵
算法·leetcode·矩阵