How many ways can you climb a staircase with 10 steps if you can take either 1 or 2 steps at a time hint group the different ways according to the number of double steps?

In order to continue enjoying our site, we ask that you confirm your identity as a human. Thank you very much for your cooperation.

How To Solve The Staircase Problem With 5 Lines Of Javascript With Code Examples

Good day, folks. In this post, we’ll examine how to find a solution to the programming challenge titled How To Solve The Staircase Problem With 5 Lines Of Javascript.

// N is total number of steps in the staircase // stepTaken is a counter for steps taken in each combination function steps(N, stepsTaken = 0) { if (stepsTaken === N) return 1; else if (stepsTaken > N) return 0; return steps(N,stepsTaken + 1) + steps(N,stepsTaken + 2) + steps(N,stepsTaken + 3); }

We were able to fix the How To Solve The Staircase Problem With 5 Lines Of Javascript problemcode by looking at a number of different examples.

How do you solve a staircase problem?

One can find a lot of similar DP problems asked during the coding interview.Solution Idea

  • If we take one step from ground, then the smaller sub-problem = climbing nth stair from 1st stair.
  • If we take two-step from ground, then the smaller sub-problem = climbing nth stair from 2nd stair.

How do you print stairs in JavaScript?

Creating Staircase Pattern In Javascript In the Below function we have first created a function staircase which takes n : number of rows of the staircase as parameter to it. Then the function print the staircase with n rows. In the function we have one outer loop and two inner loops.22-Jan-2022

How many ways are there to climb a staircase with n stairs if you can walk up the stairs 1 or 2 at a time?

There are 274 ways to climb the stairs.

How many ways can we climb a staircase with 8 steps if we can take either 1 or 2 steps at a time?

Since, either he can climb one step or two steps only, we have to partition 8 steps as a combination of 1 and 2. This can be done in 8 C 0 = 1 ways. This can be done in 7 C 1 = 7 ways. This can be done in 6 C 2 = 15 ways.13-Sept-2021

How many ways can you climb 12 steps?

The number of ways to get to the 12th step is 233. The reason for this pattern is very simple. For the first step Liam has two choices: i) Jump down 1 step.

How do you code stairs?

Summary of Code Requirements for Residential Stairs Minimum 36 inch clear width for stairway. Maximum 4-1/2 inch handrail projection into stairway width, on either side. Minimum 6′-8″ headroom height clearance for stairway. Maximum 12′-7″ vertical height (rise) for a flight of stairs.

How do you print on stairs?

In the first row, we need to print height-1 spaces followed by one # symbol. So, the number of spaces we need to print in each row is equal to the (row index number)+(height-1). And the number of # symbols which follow these spaces is equal to (row index number)+1. This is how we print the staircase pattern in C++.

How does the staircase illusion work?

The staircase could then be ascended or descended forever without ever reaching the end. This illusion is caused by perspective distortion. The brain focuses on separate sections of the image and perceives that the stairs are joined together, despite the fact that it would be impossible in a 3D object.02-Jun-2017

How do you solve a Hackerrank staircase?

How many ways can you climb a staircase with 10 steps if you can take either 1 or 2 steps at a time hint group the different ways according to the number of double steps?

So there are 89 ways of climbing a flight of ten steps using steps of one and two!17-Dec-2014

A child is running up a staircase with n steps and can hop either 1 step, 2 steps, or 3 steps at a time. Implement a method to count how many possible ways the child can run up the stairs.

Examples: 

Input : 4 Output : 7 Explanation: Below are the seven ways 1 step + 1 step + 1 step + 1 step 1 step + 2 step + 1 step 2 step + 1 step + 1 step 1 step + 1 step + 2 step 2 step + 2 step 3 step + 1 step 1 step + 3 step Input : 3 Output : 4 Explanation: Below are the four ways 1 step + 1 step + 1 step 1 step + 2 step 2 step + 1 step 3 step

There are two methods to solve this problem:  

  1. Recursive Method
  2. Dynamic Programming

Method 1: Recursive. There are n stairs, and a person is allowed to jump next stair, skip one stair or skip two stairs. So there are n stairs. So if a person is standing at i-th stair, the person can move to i+1, i+2, i+3-th stair. A recursive function can be formed where at current index i the function is recursively called for i+1, i+2 and i+3 th stair. 

There is another way of forming the recursive function. To reach a stair i, a person has to jump either from i-1, i-2 or i-3 th stair or i is the starting stair.

Algorithm: 

  1. Create a recursive function (count(int n)) which takes only one parameter.
  2. Check the base cases. If the value of n is less than 0 then return 0, and if the value of n is equal to zero then return 1 as it is the starting stair.
  3. Call the function recursively with values n-1, n-2 and n-3 and sum up the values that are returned, i.e. sum = count(n-1) + count(n-2) + count(n-3)
  4. Return the value of the sum.

            return findStep(n - 3) + findStep(n - 2)

        return findStep(n - 3) + findStep(n - 2)

    printf("%d\n", findStep(n));

    public static int findStep(int n)

            return findStep(n - 3) + findStep(n - 2)

    public static void main(String argc[])

        System.out.println(findStep(n));

        return findStep(n - 3) + findStep(n - 2) + findStep(n - 1)

    public static int findStep(int n)

            return findStep(n - 3) + findStep(n - 2)

    public static void Main()

        Console.WriteLine(findStep(n));

        return findStep($n - 3) +

            return findStep(n - 3) + findStep(n - 2)

     document.write(findStep(n));

Working:

Complexity Analysis: 

  • Time Complexity: O(3n). 
    The time complexity of the above solution is exponential, a close upper bound will be O(3n). From each state, 3 recursive function are called. So the upperbound for n states is O(3n).
  • Space Complexity:O(1). 
    As no extra space is required.

Note: The Time Complexity of the program can be optimized using Dynamic Programming.

Method 2: Dynamic Programming.
The idea is similar, but it can be observed that there are n states but the recursive function is called 3 ^ n times. That means that some states are called repeatedly. So the idea is to store the value of states. This can be done in two ways.  

  • Top-Down Approach: The first way is to keep the recursive structure intact and just store the value in a HashMap and whenever the function is called again return the value store without computing ().
  • Bottom-Up Approach: The second way is to take an extra space of size n and start computing values of states from 1, 2 .. to n, i.e. compute values of i, i+1, i+2 and then use them to calculate the value of i+3.

Algorithm:  

  1. Create an array of size n + 1 and initialize the first 3 variables with 1, 1, 2. The base cases.
  2. Run a loop from 3 to n.
  3. For each index i, computer value of ith position as dp[i] = dp[i-1] + dp[i-2] + dp[i-3].
  4. Print the value of dp[n], as the Count of the number of ways to reach n th step.

    for (int i = 3; i <= n; i++)

        res[i] = res[i - 1] + res[i - 2] + res[i - 3];

    for (int i = 3; i <= n; i++)

        res[i] = res[i - 1] + res[i - 2] + res[i - 3];

    printf("%d", countWays(n));

    public static int countWays(int n)

        int[] res = new int[n + 1];

        for (int i = 3; i <= n; i++)

            res[i] = res[i - 1] + res[i - 2] + res[i - 3];

    public static void main(String argc[])

        System.out.println(countWays(n));

    for i in range(3, n + 1):

        res[i] = res[i - 1] + res[i - 2] + res[i - 3]

    public static int countWays(int n)

        int[] res = new int[n + 2];

        for (int i = 3; i <= n; i++)

            res[i] = res[i - 1] + res[i - 2] + res[i - 3];

    public static void Main()

        Console.WriteLine(countWays(n));

    for ($i = 3; $i <= $n; $i++)

        $res[$i] = $res[$i - 1] +

        let res = new Array(n + 2);

        for (let i = 3; i <= n; i++)

            res[i] = res[i - 1] + res[i - 2] + res[i - 3];

      document.write(countWays(n));

1 -> 1 -> 1 -> 1 1 -> 1 -> 2 1 -> 2 -> 1 1 -> 3 2 -> 1 -> 1 2 -> 2 3 -> 1 So Total ways: 7
  • Complexity Analysis: 
    • Time Complexity: O(n). 
      Only one traversal of the array is needed. So Time Complexity is O(n).
    • Space Complexity: O(n). 
      To store the values in a DP, n extra space is needed.

Matrix Exponentiation is mathematical ways to solve DP problem in better time complexity. Matrix Exponentiation Technique has Transformation matrix of Size K X K and Functional Vector (K X 1) .By taking n-1th power of Transformation matrix and Multiplying It With functional vector Give Resultant Vector say it Res of Size K X 1. First Element of Res will be Answer for given n value. This Approach Will Take O(K^3logn) Time Complexity Which Is Complexity of Finding (n-1) power of Transformation Matrix.

Key Terms:

K = No of Terms in which F(n) depend ,from Recurrence Relation We can Say That F(n) depend On F(n-1) and F(n-2). => K =3

F1 =  Vector (1D array) that contain F(n) value of First K terms. Since K=3 =>F1 will have F(n) value of first 2 terms. F1=[1,2,4]

T = Transformation Matrix that is a 2D matrix of Size K X K and  Consist Of All 1 After Diagonal And Rest All Zero except last row. Last Row Will have coefficient Of all K terms in which F(n)  depends In Reverse Order. => T =[ [0 1 0] ,[0 0 1], [1 1 1] ].

Algorithms:

1)Take Input N 2)If N < K then Return Precalculated Answer //Base Condition 3)construct F1 Vector and T (Transformation Matrix) 4)Take N-1th power of T by using Optimal Power(T,N) Methods and assign it in T 5)return (TXF)[1]

for Optimal Power(T, N) Methods Refer Following Article: https://www.geeksforgeeks.org/write-a-c-program-to-calculate-powxn/amp/

vector<vector<int> > multiply(vector<vector<int> > A,

    vector<vector<int> > C(k + 1, vector<int>(k + 1));

    for (int i = 1; i <= k; i++) {

        for (int j = 1; j <= k; j++) {

            for (int x = 1; x <= k; x++) {

                C[i][j] = (C[i][j] + (A[i][x] * B[x][j]));

vector<vector<int> > pow(vector<vector<int> > t, int n)

        return multiply(t, pow(t, n - 1));

        vector<vector<int> > X = pow(t, n / 2);

    vector<vector<int> > t(k + 1, vector<int>(k + 1));

    for (int i = 1; i <= k; i++) {

        for (int j = 1; j <= k; j++) {

    for (int i = 1; i <= k; i++) {

    cout << compute(n) << endl;

    cout << compute(n) << endl;

    cout << compute(n) << endl;

    static int[][] multiply(int[][] A, int[][] B)

        int[][] C = new int[k + 1][k + 1];

        for (int i = 1; i <= k; i++) {

            for (int j = 1; j <= k; j++) {

                for (int x = 1; x <= k; x++) {

                        = (C[i][j] + (A[i][x] * B[x][j]));

    static int[][] pow(int[][] t, int n)

            return multiply(t, pow(t, n - 1));

            int[][] X = pow(t, n / 2);

    static int compute(int n)

        int f1[] = new int[k + 1];

        int[][] t = new int[k + 1][k + 1];

        for (int i = 1; i <= k; i++) {

            for (int j = 1; j <= k; j++) {

        for (int i = 1; i <= k; i++) {

    public static void main(String[] args)

        System.out.println(compute(n));

        System.out.println(compute(n));

        System.out.println(compute(n));

    C = [[0 for x in range(k+1)] for y in range(k+1)]

                C[i][j] = (C[i][j] + (A[i][x] * B[x][j]))

        return multiply(t, pow(t, n - 1))

    t = [[0 for x in range(k+1)] for y in range(k+1)]

    static int[, ] multiply(int[, ] A, int[, ] B)

        int[, ] C = new int[k + 1, k + 1];

        for (int i = 1; i <= k; i++) {

            for (int j = 1; j <= k; j++) {

                for (int x = 1; x <= k; x++) {

                        = (C[i, j] + (A[i, x] * B[x, j]));

    static int[, ] pow(int[, ] t, int n)

            return multiply(t, pow(t, n - 1));

            int[, ] X = pow(t, n / 2);

    static int compute(int n)

        int[] f1 = new int[k + 1];

        int[, ] t = new int[k + 1, k + 1];

        for (int i = 1; i <= k; i++) {

            for (int j = 1; j <= k; j++) {

        for (int i = 1; i <= k; i++) {

    static public void Main()

        Console.WriteLine(compute(n));

        Console.WriteLine(compute(n));

        Console.WriteLine(compute(n));

    let C = new Array(k + 1);

    for(let i = 1; i <= k; i++)

        for(let j = 1; j <= k; j++)

            for(let x = 1; x <= k; x++)

                C[i][j] = (C[i][j] + (A[i][x] * B[x][j]));

        return multiply(t, pow(t, n - 1));

    let t = new Array(k + 1);

    for(let i = 1; i <= k; i++)

        for(let j = 1; j <= k; j++)

    for(let i = 1; i <= k; i++)

document.write(compute(n)+"<br>");

document.write(compute(n)+"<br>");

document.write(compute(n)+"<br>");

Explanation: We Know For This Question Transformation Matrix M= [[0,1,0],[0,0,1],[1,1,1]] Functional Vector F1 = [1,2,4] for n=2 : ans = (M X F1)[1] ans = [2,4,7][1] ans = 2 //[2,4,7][1] = First cell value of [2,4,7] i.e 2 for n=3 : ans = (M X M X F1)[1] //M^(3-1) X F1 = M X M X F1 ans = (M X [2,4,7])[1] ans = [4,7,13][1] ans = 4 for n = 4 : ans = (M^(4-1) X F1)[1] ans = (M X M X M X F1) [1] ans = (M X [4,7,13])[1] ans = [7,13,24][1] ans = 7 for n = 5 : ans = (M^4 X F1)[1] ans = (M X [7,13,24])[1] ans = [13,24,44][1] ans = 13O(K^3log(n)) //For Computing pow(t,n-1) For this question K is 3 So Overall Time Complexity is O(27log(n))=O(logn)

Method 4: Using four variables

The idea is based on the Fibonacci series but here with 3 sums. we will hold the values of the first three stairs in 3 variables and will use the fourth variable to find the number of ways.

    if (n == 0 || n == 1 || n == 2)

    for (int i = 4; i <= n; i++) {

static int countWays(int n)

    if (n == 0 || n == 1 || n == 2)

    for(int i = 4; i <= n; i++)

public static void main(String[] args)

    System.out.println(countWays(n));

    if (n == 0 or n == 1 or n == 2):

static int countWays(int n)

    if (n == 0 || n == 1 || n == 2)

    for(int i = 4; i <= n; i++)

public static void Main(String[] args)

    Console.Write(countWays(n));

    if (n == 0 || n == 1 || n == 2)

    for(var i = 4; i <= n; i++)

    document.write(countWays(n));

Time Complexity: O(n) 
Auxiliary Space: O(1), since no extra space has been taken.

Method 5: DP using memoization(Top down approach)

We can avoid the repeated work done in method 1(recursion) by storing the number of ways calculated so far.

We just need to store all the values in an array.

    int findStepHelper(int n, vector<int>& dp)

        return dp[n] = findStepHelper(n - 3, dp)

                       + findStepHelper(n - 2, dp)

                       + findStepHelper(n - 1, dp);

        vector<int> dp(n + 1, -1);

        return findStepHelper(n, dp);

    private int findStepHelper(int n, int[] dp)

      return dp[n] = findStepHelper(n - 3, dp)

        + findStepHelper(n - 2, dp)

        + findStepHelper(n - 1, dp);

    public int findStep(int n)

      int[] dp = new int[n + 1];

      return findStepHelper(n, dp);

  public static void main(String args[])

    System.out.println(g.findStep(n));

    def findStepHelper(self, n, dp):

        dp[n] = self.findStepHelper(n - 3, dp) + self.findStepHelper(n - 2, dp) + self.findStepHelper(n - 1, dp)

        dp = [-1 for i in range(n + 1)]

        return self.findStepHelper(n, dp)

        return dp[n] = this.findStepHelper(n - 3, dp)

                       + this.findStepHelper(n - 2, dp)

                       + this.findStepHelper(n - 1, dp);

        let dp = new Array(n + 1).fill(-1);

        return this.findStepHelper(n, dp);

document.write(g.findStep(n));

Complexity Analysis: 

  • Time Complexity: O(n). Only one traversal of the array is needed. So Time Complexity is O(n).
  • Space Complexity: O(n). To store the values in a DP, n extra space is needed. Also, stack space for recursion is needed which is again O(n)

Article Tags :