-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathclimbStairs.py
59 lines (53 loc) · 1.27 KB
/
climbStairs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#recursive top-down solution with memoization
class Solution(object):
memo=[]
def climbStairs(self, n):
global memo
memo=[None]*(n+1)
return self._climbStairs(n)
def _climbStairs(self, n):
if(n==0):
return 0
if(n == 1):
return 1
elif(n==2):
return 2
if(memo[n] is not None):
return memo[n]
memo[n]=self._climbStairs(n-1)+self._climbStairs(n-2)
return memo[n]
#bottom up iterative
""" def climbStairs(n)
nw=None*(n+1)
nw[0]=1
nw[1]=2
i=3
while i<= n:
nw[i]=nw[i-1]+nw[i-2]
i+=1
return nw[n]
climbStairs(5)
"""
# 1/14/18 Pure recursion solution, TLE for large n.
class Solution(object):
def climbStairs(self, n):
if n == 0:
return 0
elif n == 1:
return 1
elif n ==2:
return 2
else:
return self.climbStairs(n-2) + self.climbStairs(n-1)
# memoized recursion
class Solution(object):
def climbStairs(self, n):
if n == 1:
return 1
elif n == 2:
return 2
dp = [0]*(n+1)
dp[1], dp[2] = 1, 2
for i in range(3, n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]