Jun 29, 2024
fib(n) to return the nth Fibonacci number.function fib(n) {
if (n <= 2) return 1;
return fib(n - 1) + fib(n - 2);
}
function fib(n, memo = {}) {
if (n in memo) return memo[n];
if (n <= 2) return 1;
memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
return memo[n];
}
function gridTraveler(m, n) {
if (m == 1 && n == 1) return 1;
if (m == 0 || n == 0) return 0;
return gridTraveler(m - 1, n) + gridTraveler(m, n - 1);
}
function gridTraveler(m, n) {
const table = Array(m + 1)
.fill()
.map(() => Array(n + 1).fill(0));
table[1][1] = 1;
for (let i = 0; i <= m; i++) {
for (let j = 0; j <= n; j++) {
const current = table[i][j];
if (j + 1 <= n) table[i][j + 1] += current;
if (i + 1 <= m) table[i + 1][j] += current;
}
}
return table[m][n];
}
function canSum(targetSum, numbers) {
const table = Array(targetSum + 1).fill(false);
table[0] = true;
for (let i = 0; i <= targetSum; i++) {
if (table[i]) {
for (let num of numbers) {
if (i + num <= targetSum) table[i + num] = true;
}
}
}
return table[targetSum];
}
function howSum(targetSum, numbers) {
const table = Array(targetSum + 1).fill(null);
table[0] = [];
for (let i = 0; i <= targetSum; i++) {
if (table[i] !== null) {
for (let num of numbers) {
const combination = [...table[i], num];
if (i + num <= targetSum) table[i + num] = combination;
}
}
}
return table[targetSum];
}
function bestSum(targetSum, numbers) {
const table = Array(targetSum + 1).fill(null);
table[0] = [];
for (let i = 0; i <= targetSum; i++) {
if (table[i] !== null) {
for (let num of numbers) {
const combination = [...table[i], num];
if (i + num <= targetSum) {
if (!table[i + num] || table[i + num].length > combination.length) {
table[i + num] = combination;
}
}
}
}
}
return table[targetSum];
}
function canConstruct(target, wordBank) {
const table = Array(target.length + 1).fill(false);
table[0] = true;
for (let i = 0; i <= target.length; i++) {
if (table[i]) {
for (let word of wordBank) {
if (target.slice(i, i + word.length) === word) {
table[i + word.length] = true;
}
}
}
}
return table[target.length];
}
function countConstruct(target, wordBank) {
const table = Array(target.length + 1).fill(0);
table[0] = 1;
for (let i = 0; i <= target.length; i++) {
for (let word of wordBank) {
if (target.slice(i, i + word.length) === word) {
table[i + word.length] += table[i];
}
}
}
return table[target.length];
}
function allConstruct(target, wordBank) {
const table = Array(target.length + 1).fill().map(() => []);
table[0] = [[]];
for (let i = 0; i <= target.length; i++) {
for (let word of wordBank) {
if (target.slice(i, i + word.length) === word) {
const newCombinations = table[i].map(subArray => [...subArray, word]);
table[i + word.length].push(...newCombinations);
}
}
}
return table[target.length];
}