class Solution:
def climbStairs(self, n: int) -> int:
def dfs(i):
if i >= n:
return i == n
return dfs(i + 1) + dfs(i + 2)
return dfs(0)class Solution:
def climbStairs(self, n: int) -> int:
cache = [-1] * n
def dfs(i):
if i >= n:
return i == n
if cache[i] != -1:
return cache[i]
cache[i] = dfs(i + 1) + dfs(i + 2)
return cache[i]
return dfs(0)class Solution:
def climbStairs(self, n: int) -> int:
if n <= 2:
return n
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]class Solution:
def climbStairs(self, n: int) -> int:
one, two = 1, 1
for i in range(n - 1):
temp = one
one = one + two
two = temp
return oneclass Solution:
def climbStairs(self, n: int) -> int:
if n == 1:
return 1
def matrix_mult(A, B):
return [[A[0][0] * B[0][0] + A[0][1] * B[1][0],
A[0][0] * B[0][1] + A[0][1] * B[1][1]],
[A[1][0] * B[0][0] + A[1][1] * B[1][0],
A[1][0] * B[0][1] + A[1][1] * B[1][1]]]
def matrix_pow(M, p):
result = [[1, 0], [0, 1]]
base = M
while p:
if p % 2 == 1:
result = matrix_mult(result, base)
base = matrix_mult(base, base)
p //= 2
return result
M = [[1, 1], [1, 0]]
result = matrix_pow(M, n)
return result[0][0]class Solution:
def climbStairs(self, n: int) -> int:
sqrt5 = math.sqrt(5)
phi = (1 + sqrt5) / 2
psi = (1 - sqrt5) / 2
n += 1
return round((phi**n - psi**n) / sqrt5)