DEV Community

Cover image for 1289. Minimum Falling Path Sum II
MD ARIFUL HAQUE
MD ARIFUL HAQUE

Posted on • Updated on

1289. Minimum Falling Path Sum II

1289. Minimum Falling Path Sum II

Hard

Given an n x n integer matrix grid, return the minimum sum of a falling path with non-zero shifts.

A falling path with non-zero shifts is a choice of exactly one element from each row of grid such that no two elements chosen in adjacent rows are in the same column.

Example 1:

falling-grid

  • Input: grid = [[1,2,3],[4,5,6],[7,8,9]]
  • Output: 13
  • Explanation:
The possible falling paths are:
[1,5,9], [1,5,7], [1,6,7], [1,6,8],
[2,4,8], [2,4,9], [2,6,7], [2,6,8],
[3,4,8], [3,4,9], [3,5,7], [3,5,9]
The falling path with the smallest sum is [1,5,7], so the answer is 13.
```

`
**Example 2:**

- **Input:** grid = [[7]]
- **Output:** 7


**Constraints:**

- `n == grid.length == grid[i].length`
- `1 <= n <= 200`
- `-99 <= grid[i][j] <= 99`

**Solution:**

```
class Solution {

    /**
     * @param Integer[][] $grid
     * @return Integer
     */
    function minFallingPathSum($grid) {
        $n = count($grid);
        $minFirstPathSum = 0;
        $minSecondPathSum = 0;
        $prevMinPathCol = -1;
        $kInfinity = PHP_INT_MAX; 
        foreach ($grid as $row) {
            $newMinFirstPathSum = $kInfinity;
            $newMinSecondPathSum = $kInfinity;
            $newMinPathCol = -1;
            for ($j = 0; $j < $n; ++$j) {
                $currentSum = ($prevMinPathCol != $j ? $minFirstPathSum : $minSecondPathSum) + $row[$j];
                if ($currentSum < $newMinFirstPathSum) {
                    $newMinSecondPathSum = $newMinFirstPathSum;
                    $newMinFirstPathSum = $currentSum;
                    $newMinPathCol = $j;
                } else if ($currentSum < $newMinSecondPathSum) {
                    $newMinSecondPathSum = $currentSum;
                }
            }
            $minFirstPathSum = $newMinFirstPathSum;
            $minSecondPathSum = $newMinSecondPathSum;
            $prevMinPathCol = $newMinPathCol;
        }
        return $minFirstPathSum;
    }
}
```
Enter fullscreen mode Exit fullscreen mode

Top comments (0)