From efce1d2e0fd15c90fc4408aeeea6a44b21a3d4d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Khoa=20Hu=E1=BB=B3nh=20=28Daniel=29?= Date: Fri, 26 Apr 2024 23:16:14 +0700 Subject: [PATCH] Create main.go --- solution/1289/main.go | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 solution/1289/main.go diff --git a/solution/1289/main.go b/solution/1289/main.go new file mode 100644 index 0000000..13de93c --- /dev/null +++ b/solution/1289/main.go @@ -0,0 +1,45 @@ +package main + +package main + +import ( + "math" +) + +type Triplet struct { + minSum int + secondMinSum int + minSumIndex int +} + +func minFallingPathSum(grid [][]int) int { + return minFallingPathSumHelper(0, grid).minSum +} + +func minFallingPathSumHelper(row int, grid [][]int) Triplet { + if row == len(grid) { + return Triplet{0, 0, 0} + } + + nextRowTriplet := minFallingPathSumHelper(row+1, grid) + currentTriplet := Triplet{math.MaxInt32, math.MaxInt32, -1} + + for col := 0; col < len(grid[0]); col++ { + var value int + if col != nextRowTriplet.minSumIndex { + value = grid[row][col] + nextRowTriplet.minSum + } else { + value = grid[row][col] + nextRowTriplet.secondMinSum + } + + if value <= currentTriplet.minSum { + currentTriplet.secondMinSum = currentTriplet.minSum + currentTriplet.minSum = value + currentTriplet.minSumIndex = col + } else if value < currentTriplet.secondMinSum { + currentTriplet.secondMinSum = value + } + } + + return currentTriplet +}