您的位置:首页 > 其它

【LeetCode】64. Minimum Path Sum

2016-10-20 23:58 495 查看
题目:

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[i][j] = min(dp[i-1][j],dp[i][j-1])+grid[i][j];其中初始值为dp[0][0] = grid[0][0]。

代码:

class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
vector<vector<int>> dp;
int m = grid.size();
int n = grid[0].size();
if(m == 0&&n == 0)
return 0;
for(int i = 0;i<m;i++)
dp.push_back(vector<int>());
for(int i = 0;i<m;i++)
{
for(int j = 0;j<n;j++)
dp[i].push_back(0);
}
dp[0][0] = grid[0][0];
if(m == 1&&n == 1)
return dp[0][0];
int i = 0,j = 0;
for(int i = 0;i<m;i++)
{
for(int j = 0;j<n;j++)
{
if(i-1>=0&&j-1>=0)
dp[i][j] = min(dp[i-1][j],dp[i][j-1])+grid[i][j];
else if(i-1>=0)
dp[i][j] = dp[i-1][j]+grid[i][j];
else if(j-1>=0)
dp[i][j] = dp[i][j-1]+grid[i][j];
}
}
return dp[m-1][n-1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode