You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Note: Given n will be a positive integer.
Example 1:
Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
Example 2:
Input: 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
we can use dp array where dp[i]=dp[i-1]+dp[i-2]. It can be easily analysed that dp[i] is nothing but i^{th} fibonacci number.
Fib(n)=Fib(n-1)+Fib(n-2)
Now we just have to find n^{th} number of the fibonacci series having 1 and 2 their first and second term respectively i.e. Fib(1)=1 and Fib(2)=2.
Solution
var climbStairs = function(n) { if(n===1) { return 1; } var first = 1; var second = 2; for(var i=3; i<=n; i++) { var third = first + second; first = second; second = third; } return second; }
Complexity Analysis
- Time complexity : O(n). Single loop upto n is required to calculate n^{th} fibonacci number.
- Space complexity : O(1). Constant space is used.