| 8 | * @return {number} |
| 9 | */ |
| 10 | var numDistinct = (s, t, i = 0, j = 0, memo = initMemo(s, t)) => { |
| 11 | const isBaseCase1 = s.length < t.length; |
| 12 | if (isBaseCase1) return 0; |
| 13 | |
| 14 | const isBaseCase2 = j === t.length; |
| 15 | if (isBaseCase2) return 1; |
| 16 | |
| 17 | const isBaseCase3 = i === s.length; |
| 18 | if (isBaseCase3) return 0; |
| 19 | |
| 20 | const hasSeen = memo[i][j] !== null; |
| 21 | if (hasSeen) return memo[i][j]; |
| 22 | |
| 23 | return dfs( |
| 24 | s, |
| 25 | t, |
| 26 | i, |
| 27 | j, |
| 28 | memo, |
| 29 | ); /* Time O(N * M) | Space O((N * M) + HEIGHT) */ |
| 30 | }; |
| 31 | |
| 32 | var initMemo = (s, t) => |
| 33 | new Array(s.length).fill().map(() => new Array(t.length).fill(null)); |