From b3f3754634202af94cc7f345ee19d76ddbe55d65 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Fri, 26 Apr 2024 19:55:26 +0200 Subject: [PATCH] =?UTF-8?q?cs:=20add=20=C2=AB1289.=20Minimum=20Falling=20P?= =?UTF-8?q?ath=20Sum=20II=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- cs/minimum-falling-path-sum-ii.cs | 44 +++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 cs/minimum-falling-path-sum-ii.cs diff --git a/cs/minimum-falling-path-sum-ii.cs b/cs/minimum-falling-path-sum-ii.cs new file mode 100644 index 0000000..7389dcf --- /dev/null +++ b/cs/minimum-falling-path-sum-ii.cs @@ -0,0 +1,44 @@ +public class Solution { + private int[,] PrepareDP(int[][] grid) { + int[,] dp = new int[grid.Length, grid.Length]; + + var y = grid.Length - 1; + for (var x = 0; x < grid.Length; ++x) { + dp[y, x] = grid[y][x]; + } + + return dp; + } + + private void Compute(int[][] grid, int[,] dp, int y, int x0) { + var minimum = int.MaxValue; + + for (var x = 0; x < grid.Length; ++x) { + // need to continue with different column + if (x == x0) { + continue; + } + + minimum = Math.Min(minimum, dp[y + 1, x]); + } + + dp[y, x0] = grid[y][x0] + minimum; + } + + public int MinFallingPathSum(int[][] grid) { + var dp = PrepareDP(grid); + + for (var y = grid.Length - 2; y >= 0; --y) { + for (var x = 0; x < grid.Length; ++x) { + Compute(grid, dp, y, x); + } + } + + int minFallingPath = int.MaxValue; + for (var x = 0; x < grid.Length; ++x) { + minFallingPath = Math.Min(minFallingPath, dp[0, x]); + } + + return minFallingPath; + } +}