Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,31 +1,55 @@
package com.thealgorithms.dynamicprogramming;

/* A DynamicProgramming solution for Climbing Stairs' problem Returns the
distinct ways can you climb to the staircase by either climbing 1 or 2 steps.

Link : https://medium.com/analytics-vidhya/leetcode-q70-climbing-stairs-easy-444a4aae54e8
*/
/*
* A dynamic programming solution for the "Climbing Stairs" problem.
* Returns the no. of distinct ways to climb to the top
* of a staircase when you can climb either 1 or 2 steps at a time.
*
* For example, if there are 5 steps, the possible ways to climb the
* staircase are:
* 1. 1-1-1-1-1
* 2. 1-1-1-2
* 3. 1-2-1-1
* 4. 2-1-1-1
* 5. 2-2-1
* 6. 1-1-2-1
* 7. 1-2-2
* 8. 2-1-2
* Ans: 8 ways
*/
public final class ClimbingStairs {

private ClimbingStairs() {
}

/**
* Calculates the no. of distinct ways to climb a staircase with n steps.
*
* @param n the no. of steps in the staircase (non-negative integer)
* @return the no. of distinct ways to climb to the top
* - Returns 0 if n is 0 (no steps to climb).
* - Returns 1 if n is 1 (only one way to climb).
* - For n > 1, it returns the total no. of ways to climb.
*/
public static int numberOfWays(int n) {

// Base case: if there are no steps or only one step, return n.
if (n == 1 || n == 0) {
return n;
}
int prev = 1;
int curr = 1;

int next;
int prev = 1; // Ways to reach the step before the current one (step 1)
int curr = 1; // Ways to reach the current step (step 2)
int next; // Total ways to reach the next step

for (int i = 2; i <= n; i++) {
for (int i = 2; i <= n; i++) { // step 2 to n
next = curr + prev;
prev = curr;

// Move the pointers to the next step
prev = curr;
curr = next;
}

return curr;
return curr; // Ways to reach the nth step
}
}