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.
Subscribe to see which companies asked this question
class Solution(object):
def findPath(self, m, n):
if (m,n) in self.cache:
return self.cache[(m,n)]
temp = 99999
if m < self.r:
temp = self.grid[m][n] + self.findPath(m + 1, n)
if n < self.c:
temp = min(self.grid[m][n] + self.findPath(m, n + 1),temp)
self.cache[(m,n)] = temp
return self.cache[(m,n)]
def minPathSum(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
self.grid = grid
self.r = len(grid) - 1
self.c = len(grid[0]) - 1
self.cache = {(self.r, self.c): grid[self.r][self.c]}
return self.findPath(0, 0)