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.youkuaiyun.com/linhuanmars/article/details/22257673
本文针对给定网格中寻找从左上角到右下角的最小路径和问题进行了详细解析,采用动态规划的方法求解,并提供了两种解决方案:二维DP数组和优化后的一维DP数组方法。
2713

被折叠的 条评论
为什么被折叠?



