Skip to content
Prev Previous commit
Next Next commit
formatted code
  • Loading branch information
Carlos Green committed Mar 1, 2021
commit 2d4fb25a9899432962cf36bc96468496aa8931e7
24 changes: 12 additions & 12 deletions chapter08/8.01 - Triple Step/tripleStep.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
var numWays = function(N) {
var answer = 0
var answer = 0;
var recurse = function(number) {
if (number === 0) {
answer++
answer++;
} else if (number > 0) {
recurse(number - 1)
recurse(number - 2)
recurse(number - 3)
recurse(number - 1);
recurse(number - 2);
recurse(number - 3);
}
}
recurse(N)
return answer
}
};
recurse(N);
return answer;
};

console.log(numWays(1), 1)
console.log(numWays(2), 2)
console.log(numWays(3), 4)
console.log(numWays(1), 1);
console.log(numWays(2), 2);
console.log(numWays(3), 4);
56 changes: 28 additions & 28 deletions chapter08/8.01 - Triple Step/tripleStepv2.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,57 +8,57 @@ Recursion and Dynamic Programming (4 steps)

// Recursive Backtracking
// Time & Space O(n!)
function tripleStep(n, res=0) {
if (n < 0) return 0
if (n === 0) return 1
return tripleStep(n + 1) + tripleStep(n - 2) + tripleStep(n - 3)
function tripleStep(n, res = 0) {
if (n < 0) return 0;
if (n === 0) return 1;
return tripleStep(n + 1) + tripleStep(n - 2) + tripleStep(n - 3);
}

// Top Down Memoization
// Time & Space O(n)
function tripleStep(n, i=3, memo = [1, 1, 2, 4]) {
if (n < 0) return memo[0]
if (n === 1) return memo[n]
if (i > n ) return memo[memo.length - 1]
function tripleStep(n, i = 3, memo = [1, 1, 2, 4]) {
if (n < 0) return memo[0];
if (n === 1) return memo[n];
if (i > n) return memo[memo.length - 1];

memo[i] = memo[i - 1] + memo[i - 2] + memo[i - 3]
return tripleStep(n, i+1, memo)
memo[i] = memo[i - 1] + memo[i - 2] + memo[i - 3];
return tripleStep(n, i + 1, memo);
}

// Bottom Up memoization
// Time & Space O(n)
function tripleStep(n, memo=[1,1,2,4]) {
// Time & Space O(n)
function tripleStep(n, memo = [1, 1, 2, 4]) {
for (let i = 3; i <= n; i++) {
memo[i] = memo[i - 1] + memo[i - 2] + memo[i - 3]
memo[i] = memo[i - 1] + memo[i - 2] + memo[i - 3];
}

return memo[memo.length - 1]
return memo[memo.length - 1];
}

// Constant Space
// Constant Space
// Time O(n) & Space O(1)
function tripleStep(n) {
if (n <= 0) return 0
if (n === 1) return 1
if (n === 2) return 2
if (n <= 0) return 0;
if (n === 1) return 1;
if (n === 2) return 2;

let a = 1
let b = 1
let c = 2
let a = 1;
let b = 1;
let c = 2;

for (let i = 3; i < n; i++) {
let d = a + b + c
a = b
b = c
c = d
let d = a + b + c;
a = b;
b = c;
c = d;
}
return a + b + c
return a + b + c;
}

/* TEST */
console.log(tripleStep(1), 1);
console.log(tripleStep(2), 2);
console.log(tripleStep(3), 4);
console.log(tripleStep(5), 13)
console.log(tripleStep(7), 44)
console.log(tripleStep(5), 13);
console.log(tripleStep(7), 44);
console.log(tripleStep(10), 274);