Minimum Falling Path Sum II

HardArrayDynamic ProgrammingMatrix

Solution

export function minFallingPathSum(grid: number[][]): number {
  const initialState = {
    first: Number.MAX_SAFE_INTEGER,
    firstColumn: -1,
    second: Number.MAX_SAFE_INTEGER,
  };
 
  let prev = { first: 0, firstColumn: -1, second: 0 };
  grid.forEach((row) => {
    const curr = { ...initialState };
    row.forEach((value, column) => {
      const minValue = column !== prev.firstColumn ? prev.first : prev.second;
      if (value + minValue < curr.first) {
        [curr.first, curr.second] = [value + minValue, curr.first];
        curr.firstColumn = column;
      } else {
        curr.second = Math.min(curr.second, value + minValue);
      }
    });
    prev = curr;
  });
  return prev.first;
}