No70. 爬楼梯
题目
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例1
- 输入: 2
- 输出: 2
- 解释: 有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例2
- 输入: 3
- 输出: 3
- 解释: 有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 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) 需要用字典储存斐波那契数列