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]; } };