[LeetCode]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.

思考:DP方程:dp[i][j]=grid[i][j]+min(dp[i-1][j],dp[i][j-1])。

class Solution {

public:

    int minPathSum(vector<vector<int> > &grid) {

        // IMPORTANT: Please reset any member data you declared, as

        // the same Solution instance will be reused for each test case.

        int m=grid.size();

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

		int i,j,ret=0;

		int **dp=new int*[m];		

		for(i=0;i<m;i++)

		{

			dp[i]=new int[n];

			memset(dp[i],0,sizeof(int)*n);

		}

		for(i=0;i<m;i++)

		{

			for(j=0;j<n;j++)

			{

				if(i==0&&j==0) dp[i][j]=grid[i][j];

				else if(i==0) dp[i][j]=grid[i][j]+dp[i][j-1];

				else if(j==0) dp[i][j]=grid[i][j]+dp[i-1][j];

				else dp[i][j]=grid[i][j]+min(dp[i-1][j],dp[i][j-1]);

			}

		}

		ret=dp[m-1][n-1];

		for(i=0;i<m;i++)

			delete []dp[i];

		delete []dp;

		return ret;

    }

};

  

你可能感兴趣的:(LeetCode)