-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathfindRouteToNsteps.js
41 lines (32 loc) · 1.05 KB
/
findRouteToNsteps.js
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
// There's a staircase with N steps, and you can climb 1 or 2 steps at a time.
// Given N, write a function that returns the number of unique ways you can climb the staircase.
// The order of the steps matters.
// For example, if N is 4, then there are 5 unique ways:
// 1, 1, 1, 1
// 2, 1, 1
// 1, 2, 1
// 1, 1, 2
// 2, 2
// What if, instead of being able to climb 1 or 2 steps at a time,
// you could climb any number from a set of positive integers X? For example, if X = {1, 3, 5},
// you could climb 1, 3, or 5 steps at a time. Generalize your function to take in X.
function findRoute(n, steps) {
const path = new Array(n + 1);
path.fill(0);
path[0] = 1;
path[1] = 1;
path[2] = 2;
let currentLocation = 3;
while (currentLocation <= n) {
for (let i = 0; i < steps.length; i++) {
const step = steps[i];
if (path[currentLocation - step]) {
currentLocation - step;
path[currentLocation] += path[currentLocation - step];
}
}
currentLocation++;
}
return path[n];
}
console.log(findRoute(6, [1, 2, 5]));