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.
class Solution(object):
def __init__(self):
self.dir = [[1,0],[0,1]]
def cango(self , x , y):
return 0 <= x < self.n and 0 <= y < self.m
def dfs(self , x , y):
if self.dp[x][y] != -1 :
return self.dp[x][y]
if x == self.n-1 and y == self.m-1:
self.dp[x][y] = self.grid[x][y]
return self.dp[x][y]
result = 100000000000000
for d in self.dir:
nx = x + d[0]
ny = y + d[1]
if self.cango(nx , ny):
result = min(result , self.dfs(nx, ny))
result += self.grid[x][y]
self.dp[x][y] = result
return result
def minPathSum(self, grid):
self.n = len(grid)
self.m = len(grid[0])
self.dp = [([-1]*self.m) for i in range(0 , self.n)]
self.grid = grid
return self.dfs(0,0)
if __name__ == '__main__':
s = Solution()
print(s.minPathSum([[1,2,3],[4,5,6],[7,8,9]]))