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.
Subscribe to see which companies asked this question
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int n = grid.size(), m = 0;
if(n == 0) return 0;
m = grid[0].size();
vector<int> cur(m, -1);
//dp[i][j] = min(dp[i-1][j],dp[i][j-1])+mat[i][j];
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(j>=1 && cur[j]!=-1) {
cur[j] = min(cur[j-1], cur[j])+grid[i][j];
} else if(j==0) {
if(cur[j]==-1)
cur[j] = grid[i][j];
else
cur[j] = cur[j]+grid[i][j];
} else if(cur[j]==-1) {
cur[j] = cur[j-1]+grid[i][j];
}
}
}
return cur[m-1];
}
};
本文介绍了一个算法问题:在一个填充了非负数的m x n网格中,如何找到从左上角到右下角的路径,使得路径上的数字之和最小。只允许向右或向下移动。文章提供了一种解决方案,采用动态规划思想,通过一维数组进行状态压缩,从而降低了空间复杂度。
2979

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



