Question
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.
给出一个由非负数组成的 m x n的表格,要求从左上角走到右下角的总和最小的路径。你只允许向下走或向右走
Example
None
Solution
动态规划解。这道题很明显从对每个表格选择左和上中较小的路径即可。定义dp[i][j]:从左上角到grid[i][j]的总和最小的路径。递推式为:dp[i][j] = min(dp[i][j - 1], dp[i - 1][j])
class Solution(object): def minPathSum(self, grid): """ :type grid: List[List[int]] :rtype: int """ if len(grid) == 0 or len(grid[0]) == 0: return 0 dp = [[0 for _ in range(len(grid[0]))] for _ in range(len(grid))] for index_r in range(len(grid)): for index_c in range(len(grid[0])): # 第一行只能从左向右走 if index_r == 0: dp[index_r][index_c] = grid[index_r][index_c] + dp[index_r][index_c - 1] # 第一列只能从上向下走 elif index_c == 0: dp[index_r][index_c] = grid[index_r][index_c] + dp[index_r - 1][index_c] # 其他选择上和左中较小者 else: dp[index_r][index_c] = min(dp[index_r - 1][index_c] + grid[index_r][index_c], dp[index_r][index_c - 1] + grid[index_r][index_c]) return dp[-1][-1]