numDistinct = (s, t, i = 0, j = 0, memo = initMemo(s, t)) => {
    const isBaseCase1 = (s.length < t.length);
    if (isBaseCase1) return 0;

    const isBaseCase2 = (j === t.length);
    if (isBaseCase2) return 1;

    const isBaseCase3 = (i === s.length);
    if (isBaseCase3) return 0;

    const hasSeen = (memo[i][j] !== null);
    if (hasSeen) return memo[i][j];

    return dfs(s, t, i, j, memo);/* Time O(N * M) | Space O((N * M) + HEIGHT) */
}
DP - Top Down
Matrix - Memoization
Time O(N * M) | Space (N * M)
https://leetcode.com/problems/distinct-subsequences/
@param {string} s
@param {string} t
@return {number}