Description
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.
Example:
Input:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.
Solution
It’s a dynamic programming problem
the shortest path to position (i,j)
comes from two position:
- the shortest path to
(i,j-1)
+grid[i][j]
- the shortest path to
(i-1,j)
+grid[i][j]
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int n = grid[0].size();
int m = grid.size();
vector<int> res(n,0);
res[0]=grid[0][0];
for(int i = 1 ; i < n ; ++i)
res[i] = grid[0][i] + res[i-1];
for(int i = 1; i < m ; ++i)
{
for(int j = 0 ; j < n ; ++j)
{
if(j == 0) res[j] = res[j] + grid[i][j];
else res[j] = res[j] > res[j-1] ? res[j-1] + grid[i][j] : res[j] +grid[i][j];
}
}
return res[n-1];
}
};
result:
Runtime: 12 ms, faster than 98.28% of C++ online submissions for Minimum Path Sum.
Memory Usage: 10.4 MB, less than 100.00% of C++ online submissions for Minimum Path Sum.
20190411
tbc.