coinChange = (coins, amount, memo = initMemo(amount)) => {
    const isBaseCase1 = (amount < 0);
    if (isBaseCase1) return -1;

    const isBaseCase2 = (amount < 1);
    if (isBaseCase2) return 0;

    const isBaseCase3 = (memo[amount - 1] !== 0);
    if (isBaseCase3) return memo[amount - 1];

    return dfs(coins, amount, memo);/* Time O(N) | Space O(N) */
}
DP - Top Down
Array - Memoization
Time O(N) | Space O(N)
https://leetcode.com/problems/coin-change/
@param {number[]} coins
@param {number} amount
@return {number}