Number of Increasing Paths in a Grid - DFS w/ Memoization [JS]

Description 

Solution: DFS w/ Recursion & Memoization

DFS from every cell to count the number of paths from each cell.
Memoize the results of each dfs(row, column).
This solution works because each path must be strictly increasing, insuring that we never revisit a cell.

Time Complexity: O(mn) 450ms
Space Complexity: O(mn) 86.7MB

var countPaths = function(grid) {
  let m = grid.length, n = grid[0].length, mod = 10 ** 9 + 7;
  let ans = 0, memo = Array(m).fill(0).map(() => Array(n).fill(-1));
  for (let i = 0; i < m; i++) {
    for (let j = 0; j < n; j++) {
      ans = (ans + dfs(i, j)) % mod;
    }
  }
  return ans;

  function dfs(i, j) {
    const directions = [[-1, 0], [0, 1], [1, 0], [0, -1]];
    if (memo[i][j] !== -1) return memo[i][j];
    let ans = 1;
    for (let [x, y] of directions) {
      let newX = i + x, newY = j + y;
      if (newX < 0 || newX >= m || newY < 0 || newY >= n || grid[newX][newY] <= grid[i][j]) continue;
      ans = (ans + dfs(newX, newY)) % mod;
    }
    return memo[i][j] = ans;
  }     
};

javascript

Comments

Popular posts from this blog

Minimum Number of Operations to Sort a Binary Tree by Level - BFS & Cycle Counting Explained [JS]

Beautiful Towers II - Monotonic Increasing Stack [JS]

Reschedule Meetings for Maximum Free Time I - Sliding Window - Constant Space [JS]

Maximum Sum of Distinct Subarrays With Length K - Sliding Window w/ Two Pointers & Set [JS]

Sum of Prefix Scores of Strings - Trie [JS]