File tree Expand file tree Collapse file tree 1 file changed +71
-0
lines changed Expand file tree Collapse file tree 1 file changed +71
-0
lines changed Original file line number Diff line number Diff line change
1
+ '''
2
+ # Leetcode 70. Climbing Stairs
3
+
4
+ use `dynamic programming` to solve the problem.
5
+
6
+ 1. Bottom-up approach
7
+ 2. Top-down approach
8
+
9
+ ## Time and Space Complexity
10
+
11
+ ### 1. Bottom-up approach
12
+
13
+ ```
14
+ TC: O(n)
15
+ SC: O(1)
16
+ ```
17
+
18
+ #### TC is O(n):
19
+ - iterating with a for loop. O(n)
20
+
21
+ #### SC is O(1):
22
+ - using a constant space to store the previous two steps. O(1)
23
+
24
+ ### 2. Top-down approach
25
+
26
+ ```
27
+ TC: O(n)
28
+ SC: O(n)
29
+ ```
30
+
31
+ #### TC is O(n):
32
+ - performing a recursive call for each step. O(n)
33
+
34
+ #### SC is O(n):
35
+ - using a memoization object to store the previous two steps. O(n)
36
+ '''
37
+
38
+ class Solution :
39
+ '''
40
+ 1. Bottom-up approach
41
+ '''
42
+ def climbStairsLoop (self , n : int ) -> int :
43
+ if n == 1 or n == 2 :
44
+ return n
45
+
46
+ # SC: O(1)
47
+ prev2 = 1 # ways to step 0
48
+ prev1 = 1 # ways to step 1
49
+
50
+ for i in range (3 , n + 1 ): # TC: O(n)
51
+ current = prev1 + prev2 # ways to (n-1) + (n-2)
52
+ prev2 = prev1
53
+ prev1 = current
54
+
55
+ return prev1
56
+
57
+ '''
58
+ 2. Top-down approach
59
+ '''
60
+ def climbStairsRecursive (self , n : int ) -> int :
61
+ memo = {} # SC: O(n)
62
+
63
+ def dp (step : int , memo : int ) -> int : # TC: O(n)
64
+ if step == 1 or step == 2 :
65
+ memo [step ] = step
66
+ if step not in memo :
67
+ memo [step ] = dp (step - 1 , memo ) + dp (step - 2 , memo ) # ways to (n-1) + (n-2)
68
+ return memo [step ]
69
+
70
+ return dp (n , memo )
71
+
You can’t perform that action at this time.
0 commit comments