mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-21 19:14:55 +08:00
56 lines
1.6 KiB
Java
56 lines
1.6 KiB
Java
package com.thealgorithms.dynamicprogramming;
|
|
|
|
/*
|
|
* 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; // 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++) { // step 2 to n
|
|
next = curr + prev;
|
|
|
|
// Move the pointers to the next step
|
|
prev = curr;
|
|
curr = next;
|
|
}
|
|
|
|
return curr; // Ways to reach the nth step
|
|
}
|
|
}
|