一:解题思路
这是一道经典的动态规划的题目。Time:O(m*n),Space:O(n)
二:完整代码示例 (C++版和Java版)
C++:
class Solution { public: int minPathSum(vector<vector<int>>& grid) { int m = grid.size(), n = grid[0].size(); vector<int> d(n,-1); d[0] = grid[0][0]; for (int j = 1; j < n; j++) d[j] = d[j - 1] + grid[0][j]; for (int i = 1; i < m; i++) { d[0] += grid[i][0]; for (int j = 1; j < n; j++) d[j] = min(d[j], d[j - 1]) + grid[i][j]; } return d[n-1]; } };
Java:
class Solution { public int minPathSum(int[][] grid) { int m=grid.length,n=grid[0].length; int[] d=new int[n]; d[0]=grid[0][0]; for(int j=1;j<n;j++) d[j]=d[j-1]+grid[0][j]; for(int i=1;i<m;i++) { d[0]+=grid[i][0]; for(int j=1;j<n;j++) d[j]=Math.min(d[j],d[j-1])+grid[i][j]; } return d[n-1]; } }