""" 0070.1 - Climbing Stairs - Solution 1 - Dynamic Programming (Bottom-Up) """
#####################################################################################
# Imports
#####################################################################################
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def climbStairs(self, n: int) -> int:
"""Climbing Stairs Function"""
if n <= 2:
return n
dp = [0] * (n + 1)
dp[1] = 1
dp[2] = 2
for i in range(3, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().climbStairs(2)) # 2
print(Solution().climbStairs(3)) # 3
print(Solution().climbStairs(5)) # 8
print(Solution().climbStairs(45)) # 1836311903
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()
""" 0070.2 - Climbing Stairs - Solution 2 - Space-Optimized (Two Variables) """
#####################################################################################
# Imports
#####################################################################################
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def climbStairs(self, n: int) -> int:
"""Climbing Stairs Function"""
if n <= 2:
return n
prev2 = 1
prev1 = 2
for i in range(3, n + 1):
curr = prev1 + prev2
prev2 = prev1
prev1 = curr
return prev1
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().climbStairs(2)) # 2
print(Solution().climbStairs(3)) # 3
print(Solution().climbStairs(5)) # 8
print(Solution().climbStairs(45)) # 1836311903
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()