class Solution { public: int minPathSum(vector<vector<int>>& grid) { int m = grid.size(); if (m == 0) return 0; int n = grid[0].size(); if (n == 0) return 0; vector<int> path(n,0); for(int i=m-1;i>=0;i--) { for(int j=n-1;j>=0;j--) { if(i==m-1&&j==n-1)//右下角情况 path[j]=grid[i][j]; else if(i==m-1)//最后一行情况 path[j]=path[j+1]+grid[i][j]; else if(j==n-1)//最右一列情况 path[j]=path[j]+grid[i][j]; else//中间情况 path[j]=grid[i][j]+min(path[j],path[j+1]); } } return path[0]; } };
分析:
为节约空间,采用一维辅助空间,但是我分析问题时候稍微有点难受。还好。