1. 程式人生 > >【LeetCode】64. Minimum Path Sum

【LeetCode】64. Minimum Path Sum

 

class Solution:
    # 遞迴法(TLE)
    def search(self, grid, r, c):
        if r == 0 and c == 0:
            return grid[0][0]
        elif r == 0:
            return self.search(grid, r, c-1) + grid[r][c]
        elif c == 0:
            return self.search(grid, r-1, c) + grid[r][c]
        else:
            return min(self.search(grid, r-1, c) + grid[r][c], self.search(grid, r, c-1) + grid[r][c])
    def minPathSum(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        r, c = len(grid)-1, len(grid[0])-1
        return self.search(grid, r, c)


class Solution:
    # 動態規劃
    def minPathSum(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        opt = [[0]*len(grid[0]) for _ in range(len(grid))]
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if i == 0 and j == 0:
                    opt[i][j] = grid[i][j]
                elif i == 0:
                    opt[i][j] = opt[i][j-1] + grid[i][j]
                elif j == 0:
                    opt[i][j] = opt[i-1][j] + grid[i][j]
                else:
                    opt[i][j] = min(opt[i-1][j] + grid[i][j], opt[i][j-1] + grid[i][j])
        return opt[-1][-1]