Path with Maximum Gold

MediumArrayBacktrackingMatrix

Solution

export function getMaximumGold(grid: number[][]): number {
  const [m, n] = [grid.length, grid[0].length];
  const directions = [
    [0, 1],
    [1, 0],
    [0, -1],
    [-1, 0],
  ];
 
  function dfs(y: number, x: number) {
    if (y < 0 || m <= y || x < 0 || n <= x || grid[y][x] === 0) {
      return 0;
    }
 
    const gold = grid[y][x];
    grid[y][x] = 0;
    let maxGold = 0;
    for (const [dy, dx] of directions) {
      maxGold = Math.max(maxGold, dfs(y + dy, x + dx));
    }
    grid[y][x] = gold;
    return maxGold + gold;
  }
 
  let answer = 0;
  for (let y = 0; y < m; y++) {
    for (let x = 0; x < n; x++) {
      answer = Math.max(answer, dfs(y, x));
    }
  }
  return answer;
}