Description
You are climbing a staircase. It takes n steps to reach the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Example 1:
Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
Example 2:
Input: n = 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
Constraints:
1 <= n <= 45
Solution
Use dp[i]
to denote the number of ways to reach step i
, then the transform equation will be:
d
p
[
i
]
=
d
p
[
i
−
1
]
+
d
p
[
i
−
2
]
dp[i] = dp[i - 1] + dp[i - 2]
dp[i]=dp[i−1]+dp[i−2]
So the initial values are:
d
p
[
1
]
=
1
,
d
p
[
2
]
=
2
dp[1]=1, dp[2]=2
dp[1]=1,dp[2]=2, it’s actually the fibonacci sequence.
Time complexity:
o
(
n
)
o(n)
o(n)
Space complexity:
o
(
1
)
o(1)
o(1) by using variables instead of using list
Code
class Solution:
def climbStairs(self, n: int) -> int:
dp0, dp1 = 1, 2
for i in range(1, n):
dp0, dp1 = dp1, dp0 + dp1
return dp0