https://leetcode.com/problems/minimum-path-sum/description/
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
Example:
Input: [ [1,3,1], [1,5,1], [4,2,1] ] Output: 7 Explanation: Because the path 1→3→1→1→1 minimizes the sum.
class Solution(object):
def minSum(self, grid, row, col):
m, n = len(grid), len(grid[0])
if row == m - 1:
res = 0
for i in range(col + 1, n):
res += grid[row][i]
return res
elif col == n - 1:
res = 0
for i in range(row + 1, m):
res += grid[i][col]
return res
if self.dp[row][col + 1] < 0:
self.dp[row][col + 1] = self.minSum(grid, row, col + 1)
if self.dp[row + 1][col] < 0:
self.dp[row + 1][col] = self.minSum(grid, row + 1, col)
return min(grid[row][col + 1] + self.dp[row][col + 1], grid[row + 1][col] + self.dp[row + 1][col])
def minPathSum(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
m, n = len(grid), len(grid[0])
self.dp = [[-1] * n for _ in range(m)]
return grid[0][0] + self.minSum(grid, 0, 0)