Leetcode-64:最小路径和

个人思路总结:

==动态规划问题。==我们新建一个额外的 dp 数组,与原矩阵大小相同。在这个矩阵中,dp(i, j) 表示从坐标 (i, j) 到右下角的最小路径权值。我们初始化右下角的 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) {
        int height = grid.size();
        int width = grid[0].size();
        int dp[height][width];
        dp[0][0] = grid[0][0];
        for(int i=1;i<height;i++)
            dp[i][0] = grid[i][0]+dp[i-1][0];
        for(int j=1;j<width;j++)
            dp[0][j] = grid[0][j]+dp[0][j-1];
        for(int i=1;i<height;i++)
        {
            for(int j=1;j<width;j++)
            {
                dp[i][j] = grid[i][j] + min(dp[i-1][j],dp[i][j-1]);
            }
        }
        return dp[height-1][width-1];
    }
};

你可能感兴趣的:(个人leetcode总结)