Leetcode第64题 最小路径和C++解法

DP就完事了,就是需要注意边界条件

class Solution {
    
    
public:
    int minPathSum(vector<vector<int>>& grid) {
    
    
        int m=grid.size(),n=grid[0].size();
        int dp [m+1][n+1];
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=m;++i)
            for(int j=1;j<=n;++j)
                if(i==1||j==1)
                dp[i][j]=max(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
                else
                dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
        return dp[m][n];
    }
};

再优化下空间复杂度

class Solution {
    
    
public:
    int minPathSum(vector<vector<int>>& grid) {
    
    
        int m=grid.size(),n=grid[0].size();
        int dp [n+1];
        dp[0]=0;
        for(int i=1;i<=n;++i) dp[i]=dp[i-1]+grid[0][i-1];
        for(int i=2;i<=m;++i){
    
    
            for(int j=1;j<=n;++j){
    
    
                if(j==1)    dp[j]=dp[j]+grid[i-1][j-1];
                else dp[j]=min(dp[j],dp[j-1])+grid[i-1][j-1];
            }
        }
        return dp[n];
    }
};

猜你喜欢

转载自blog.csdn.net/meixingshi/article/details/113923161