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.
和Unique Path类似,同样是用动态规划~递推式是dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]~代码如下~
class Solution:
# @param grid, a list of lists of integers
# @return an integer
def minPathSum(self, grid):
if grid is None or len(grid) == 0 or len(grid[0]) == 0: return 0
lenRow, lenCol = len(grid), len(grid[0])
dp = [[0] * lenCol for i in xrange(lenRow)]
dp[0][0] = grid[0][0]
for i in xrange(1, lenRow):
dp[i][0] = dp[i - 1][0] + grid[i][0]
for j in xrange(1, lenCol):
dp[0][j] = dp[0][j - 1] + grid[0][j]
for i in xrange(1, lenRow):
for j in xrange(1, lenCol):
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]
return dp[lenRow - 1][lenCol - 1]
还有一种一维的动态规划解法,可以参考http://blog.csdn.net/linhuanmars/article/details/22257673