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*N矩阵,由左上到右下的路径中,求路径和最小。
采用动态规划,ret[i][j]表示到此点的路径和,最后ret[m][n] 等于grid[m][n]加上ret[m-1][n]或者ret[m][n-1]。要求最小路径和,那么就去min(ret[m-1][n],ret[m][n-1]).
因此可以得出
ret[m][n] = gird[m][n]+min(ret[m-1][n],ret[m][n-1])
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
if (n == 1&&m==1)
return grid[0][0];
int ret[m][n];
ret[0][0] = grid[0][0];
for(int i = 1;i<n;i++){
ret[0][i] = ret[0][i-1] + grid[0][i];
}
for(int j = 1;j<m;j++) {
ret[j][0] = ret[j-1][0] + grid[j][0];
}
for(int i = 1;i<m;i++){
for(int j = 1;j<n;j++) {
ret[i][j] = grid[i][j] + min(ret[i-1][j],ret[i][j-1]);
}
}
return ret[m-1][n-1];
}
};