- 分类:Backtracking/DP
- 时间复杂度: O(n*m)
70. Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Note: Given n will be a positive integer.
Example 1:
Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
Example 2:
Input: 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step
代码:
记忆化递归方法:
class Solution:
def climbStairs(self, n: 'int') -> 'int':
if n==0:
return 0
res=self.paths(n,{})
return res
def paths(self,n,memo):
if n in memo:
return memo[n]
else:
if n==0:
return 1
elif n==1:
return 1
else:
memo[n]=self.paths(n-1,memo)+self.paths(n-2,memo)
return memo[n]
DP方法:
class Solution:
def climbStairs(self, n: 'int') -> 'int':
if n==0:
return 0
res=[0 for i in range(n+1)]
res[0]=1
res[1]=1
for i in range(2,n+1):
res[i]+=(res[i-1])+(res[i-2])
return res[-1]
讨论:
1.感觉今天自己完全搞懂了一种题型!DP+记忆化递归小能手!