【Leetcode】70. 爬楼梯(Climbing Stairs)

No70. 爬楼梯

题目

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

思路:

第1阶有一种方法
第2阶可以从第0阶或第1阶上来,共两种方法
第3阶可以从第1阶或第2阶上来,共三种方法

原题目转化为求斐波那契数列,每次递归的时候先访问字典,如果不存在则进行求解并将其存入到字典中;如果存在则直接返回。

相当于做了剪枝操作。

解题代码(Python3)

class Solution:
    def climbStairs(self, n: int) -> int:
        def fibonacci(num):
            if num in dict:
                return dict[num]
            else:
                res = fibonacci(num-1) + fibonacci(num-2)
                dict[num] = res
                return res
        dict = {
    
    0:1,1:1}
        return fibonacci(n)

复杂度分析:

  • 时间复杂度 O(logn)
  • 空间复杂度 O(n) 需要用字典储存斐波那契数列

运行结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Xiao_Spring/article/details/113747782