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.
提示:思路类似unique path,计算left与up,然后计算其他。这个过程可以简化为两列,到一列,节省空间。
答案:
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]; } };