LeetCode 64: Minimum Path Sum

来源:互联网 发布:潍坊行知学校录取标准 编辑:程序博客网 时间:2024/04/30 00:02

Difficulty: 3

Frequency: 3


Problem:

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.


Solution:

class Solution {public:    int minPathSum(vector<vector<int> > &grid) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        vector<vector<int> >pathSumMatrix(grid);        for (int i = 0; i<grid.size(); i++)        {            for (int j = 0; j<grid[i].size(); j++)            {                pathSumMatrix[i][j] = -1;            }        }        pathSumMatrix[0][0] = grid[0][0];        return minPathSumRecursive(grid, pathSumMatrix, grid.size() - 1, grid[0].size() - 1);    }    int minPathSumRecursive(vector<vector<int> > &grid, vector<vector<int> > &pathSumMatrix, int i_row, int i_col)    {        if (pathSumMatrix[i_row][i_col]!=-1)            return pathSumMatrix[i_row][i_col];                int i_up = i_row==0?0x7FFFFFFF:minPathSumRecursive(grid, pathSumMatrix, i_row - 1, i_col);        int i_left = i_col==0?0x7FFFFFFF:minPathSumRecursive(grid, pathSumMatrix, i_row, i_col - 1);        return pathSumMatrix[i_row][i_col] = (i_up<i_left?i_up:i_left) + grid[i_row][i_col];    }};


Notes:

No comment. Haha.