All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0001_0100.s0064_minimum_path_sum.solution.go Maven / Gradle / Ivy

package s0064_minimum_path_sum

// #Medium #Top_100_Liked_Questions #Array #Dynamic_Programming #Matrix
// #Dynamic_Programming_I_Day_16 #Udemy_Dynamic_Programming #Big_O_Time_O(m*n)_Space_O(m*n)
// #2024_03_14_Time_0_ms_(100.00%)_Space_4.1_MB_(24.44%)

func minPathSum(grid [][]int) int {
	if len(grid) == 1 && len(grid[0]) == 1 {
		return grid[0][0]
	}
	dm := make([][]int, len(grid))
	for i := range dm {
		dm[i] = make([]int, len(grid[0]))
	}
	sum := 0
	for r := len(grid) - 1; r >= 0; r-- {
		dm[r][len(grid[0])-1] = grid[r][len(grid[0])-1] + sum
		sum += grid[r][len(grid[0])-1]
	}
	sum = 0
	for c := len(grid[0]) - 1; c >= 0; c-- {
		dm[len(grid)-1][c] = grid[len(grid)-1][c] + sum
		sum += grid[len(grid)-1][c]
	}
	return recur(grid, dm, 0, 0)
}

func recur(grid [][]int, dm [][]int, r, c int) int {
	if dm[r][c] == 0 && r != len(grid)-1 && c != len(grid[0])-1 {
		dm[r][c] = grid[r][c] + min(recur(grid, dm, r+1, c), recur(grid, dm, r, c+1))
	}
	return dm[r][c]
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy