###### tags: `leetcode` `easy` `Math` `Dynamic Programming` `Memoization` # [70. Climbing Stairs](https://leetcode.com/problems/climbing-stairs/description/) ## 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? ## Examples ### 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 \leq n \leq 45$ ## Code ```c int climbStairs(int n){ if(n < 3) return n; int preOne = 0, preTwo = 1, result = 2; for(int i = 2 ; i < n ; i++){ preOne = preTwo; preTwo = result; result = preOne + preTwo; } return result; } ``` ## Complexity |Space |Time | |- |- | |$O(N)$|$O(N)$| ## Result - Runtime : 0 ms, 100% - Memory : 5.4 MB, 95.97%