-
Notifications
You must be signed in to change notification settings - Fork 19.9k
/
Copy pathClimbingStairs.java
55 lines (47 loc) · 1.56 KB
/
ClimbingStairs.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
}
}