leetcode_c++:Minimum Path Sum (064)

来源:互联网 发布:java网络编程 pdf 编辑:程序博客网 时间:2024/06/04 18:23

题目

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.


算法

DP
O(n^2)
* 本题我们首先可以找出递推关系,比如设存放起点到每个格子 i,j 的最小路径和的二维数组为 MPS[i][j],那么递推公式为:
MPS[i][j] = min(MPS[i-1][j],MPS[i][j-1]) + val[i][j]
* 从左上到右下走,利用一个双重循环来计算迭代的结果。外层循环是行为单位,内层循环是列为单位。每次计算某个格时,其左侧和上册格子是已经计算好的


class Solution {public:    int minPathSum(vector<vector<int> >& grid) {        if(grid.size()==0)            return 0;        vector<vector<int> > res(grid);        int i,j;        for(int j=1;j<res[0].size();++j)            res[0][j]+=res[0][j-1];        for(int j=1;j<res.size();++j)            res[j][0]+=res[j-1][0];        for(int i=1;i<res.size();++i){            for(int j=1;j<res[i].size();++j)                res[i][j]=min(res[i-1][j],res[i][j-1])+grid[i][j];        }        return  res[grid.size()-1][grid[0].size()-1]; // 注意列的size是不一样的    }};
0 0
原创粉丝点击