From 842ff5294f5e97dfd1e4c09f9d9e01a89ac16e32 Mon Sep 17 00:00:00 2001 From: Hardik Pawar <97388607+Hardvan@users.noreply.github.com> Date: Wed, 2 Oct 2024 19:25:57 +0530 Subject: [PATCH] Improve comments & readability in ClimbingStairs.java (#5498) --- .../dynamicprogramming/ClimbingStairs.java | 46 ++++++++++++++----- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/thealgorithms/dynamicprogramming/ClimbingStairs.java b/src/main/java/com/thealgorithms/dynamicprogramming/ClimbingStairs.java index d79ed3c23..0f0f5375b 100644 --- a/src/main/java/com/thealgorithms/dynamicprogramming/ClimbingStairs.java +++ b/src/main/java/com/thealgorithms/dynamicprogramming/ClimbingStairs.java @@ -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 } }