leetcode每日刷题计划--day61

Num 64 最小路径和

因为动态规划必考所以先刷一下动态规划tag

一遍过,题给vector是可变的,这边先用不可变的数组,稍微有点浪费可能?

然后从可能来的两个点找最小值加当前值即可。

一个可以优化的地方:1000*1000过大,实际上可以使用一维数组。(注意不要因为一维数组就省略了对i的判断,不然dp[j]的迭代更新会出错)

代码注释掉的是二维的,有的是一维的

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        int x=grid.size();
        int y=grid[0].size();
        //int dp[1000][1000];
        int dp[1000];
        memset(dp,0,sizeof(dp));
        dp[0]=grid[0][0];
        /*for(int i=0;i<x;i++)
        {
            for(int j=0;j<y;j++)
            {
                if(j>=1 && i>=1)
                    dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j];
                else if(j>=1)
                    dp[i][j]=dp[i][j-1]+grid[i][j];
                else if(i>=1)
                    dp[i][j]=dp[i-1][j]+grid[i][j];
            }
        }*/
        for(int i=0;i<x;i++)
        {
            for(int j=0;j<y;j++)
            {
                if(j>=1 && i>=1)
                    dp[j]=min(dp[j],dp[j-1])+grid[i][j];
                else if(j>=1)
                    dp[j]=dp[j-1]+grid[i][j];
                else if(i>=1)
                    dp[j]=dp[j]+grid[i][j];
            }
        }
        return dp[y-1];
    }
};
View Code

猜你喜欢

转载自www.cnblogs.com/tingxilin/p/11959461.html