题目:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
答案:
class Solution:
def climbStairs(self, n: int) -> int:
# 暴力超时
# if n == 1 or n == 0:
# return 1
# return self.climbStairs(n-1)+self.climbStairs(n-2)
# 在暴力的基础上,记忆化递归
def dfs(i:int, memo) -> int:
if i == 0 or i == 1:
return 1
if memo[i] == -1:
memo[i] = dfs(i-1, memo) + dfs(i-2, memo)
return memo[i]
return dfs(n, [-1] * (n+1))
从第0个台阶开始爬,假设爬到第n个台阶有f(n)种方法,因为每次只能爬一个或者两个,所以有f(n-1)+f(n-2)=f(n)
我们从第0个台阶爬到第0个台阶和第1个台阶,都是只有一种爬法,故而有f(0)=f(1)=1