64. Minimum Path Sum

题目描述

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.

代码实现

class Solution {
public:
    int minPathSum(vector<vector<int> > &grid) {

    	int m = grid.size();
    	if(m == 0)
    		return 0;
    	int n = grid[0].size();
    	if(n == 0)
    		return 0;

    	vector<int> minSum(n,0);

    	for(int i=0;i<m;i++)
    	{
    		for(int j=0;j<n;j++)
    		{   //分情况讨论:根据能不能从左边到达,从上边到达
                //先讨论两种途径都不能达到的情况
    			if(i == 0 && j == 0)
    				minSum[j] = grid[i][j];
    			else 
    			{   //下边的就是当前至少有一种途径能够达到的情况
    				int up = INT_MAX;//初始化为一个不可能的值,根据递归公式做出合理
    				if(i > 0)        //的初始化
    					up = minSum[j];
    			    int left = INT_MAX;
    			    if(j > 0)
    			    	left = minSum[j-1];

    			    minSum[j] = min(left,up)+grid[i][j];   			    
    			}
                
    		}
    	}
    	return minSum[n-1];       
    }
};

posted on 2021-04-03 09:24  朴素贝叶斯  阅读(29)  评论(0编辑  收藏  举报

导航