Improve comments & readability in ClimbingStairs.java (#5498)

This commit is contained in:
Hardik Pawar
2024-10-02 19:25:57 +05:30
committed by GitHub
parent e6f597acaf
commit 842ff5294f

View File

@ -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
}
}