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.
Tip: The idea is similar to unique path, calculate left and up, and then calculate others. This process can be simplified from two columns to one column, saving space.
Answer:
class Solution { public: int minPathSum(vector<vector<int>>& grid) { int m = grid.size(), n = grid[0].size(); vector<int> cur(m, grid[0][0]); for(int i = 1; i < m; i++){ cur[i] = cur[i - 1] + grid[i][0]; } for(int j = 1; j < n; j++){ cur[0] = cur[0] + grid[0][j]; for(int i = 1; i < m; i++){ cur[i] = min(cur[i - 1],cur[i]) + grid[i][j]; } } return cur[m -1]; } };