法一:递归+记忆
执行用时:40 ms, 在所有 Python3 提交中击败了58.96%的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了5.11%的用户
class Solution:
def climbStairs(self, n: int) -> int:
def dfs(n,memo):
if n==0 or n==1:
memo[n]=1
if memo[n]==-1:
memo[n]=dfs(n-2,memo)+dfs(n-1,memo)
return memo[n]
return dfs(n,[-1]*(n+1))
法二:动态规划+简便双值
执行用时:36 ms, 在所有 Python3 提交中击败了81.82%的用户
内存消耗:14.9 MB, 在所有 Python3 提交中击败了38.03%的用户
class Solution:
def climbStairs(self, n: int) -> int:
a,b=1,1
for i in range(1,n):
a,b=b,a+b
return b
"""
#动态规划
dp=[0]*(n+1)
dp[0]=dp[1]=1
for i in range(2,n+1):
dp[i]=dp[i-1]+dp[i-2]
return dp[-1]
"""