题目
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.
分析
和Dungeon Game 的方法类似,比那个问题还要简单,自己在草纸上画一下会更清晰。
但是空间复杂度比较高,好像有空间复杂度为O(n) 的算法,可以再深入研究一下
实现
/*
Author:Fancy
Date:2017-03-20
Algorithm:64-Minimum Path Sum
Space Complexity:O(M*N)
*/
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int rows = grid.size(), cols = grid[0].size();
vector<vector<int>> sumMat(rows + 1, vector<int>(cols + 1, INT_MAX));
sumMat[rows][cols - 1] = 0;
sumMat[rows - 1][cols] = 0;
for (int i = rows-1; i >= 0; i--)
for (int j = cols-1; j >= 0; j--)
sumMat[i][j] = min(sumMat[i][j + 1], sumMat[i + 1][j]) + grid[i][j];
return sumMat[0][0];
}
};