Minimum Falling Path Sum

MediumArrayDynamic ProgrammingMatrix

Solution

import { range } from '@algorithm/lib';
 
export function minFallingPathSum(matrix: number[][]): number {
  const maxSize = Number.MAX_SAFE_INTEGER;
  const n = matrix.length;
  const dp = new Array(n).fill(undefined).map(() => new Array<number>(n).fill(maxSize));
  dp[0] = matrix[0];
 
  for (const row of range(1, n)) {
    for (const col of range(n)) {
      const prevMinValue = Math.min(
        dp[row - 1][col - 1] ?? maxSize,
        dp[row - 1][col],
        dp[row - 1][col + 1] ?? maxSize,
      );
      dp[row][col] = matrix[row][col] + prevMinValue;
    }
  }
 
  const answer = Math.min(...dp[n - 1]);
  return answer;
}