Out of Boundary Paths

MediumDynamic Programming

Solution

export function findPaths(
  m: number,
  n: number,
  maxMove: number,
  startRow: number,
  startColumn: number,
): number {
  if (maxMove === 0) {
    return 0;
  }
 
  const MOD = 10 ** 9 + 7;
  let prev = Array.from({ length: m }).map(() => new Array(n).fill(0));
  prev[startRow][startColumn] = 1;
 
  let answer = 0;
  const directions = [
    [-1, 0],
    [1, 0],
    [0, -1],
    [0, 1],
  ];
  for (let step = 0; step < maxMove; step++) {
    const current = Array.from({ length: m }).map(() => new Array(n).fill(0));
    for (let row = 0; row < m; row++) {
      for (let col = 0; col < n; col++) {
        for (const [drow, dcol] of directions) {
          const [nrow, ncol] = [row + drow, col + dcol];
          if (0 <= nrow && nrow < m && 0 <= ncol && ncol < n) {
            current[nrow][ncol] = (current[nrow][ncol] + prev[row][col]) % MOD;
          } else {
            answer = (answer + prev[row][col]) % MOD;
          }
        }
      }
    }
    prev = current;
  }
  return answer;
}