Minimum Path Sum
2014-09-11 07:59
232 查看
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
思路:这也是一道DP题,f[m]
表示点(m,n)的最小和,它可由min{f[m-1]
+grid[m]
,f[m][n-1]+grid[m]
}得到,然后注意m=0 || m=1 || n=0 || n=1的临界条件即可。
Note: You can only move either down or right at any point in time.
思路:这也是一道DP题,f[m]
表示点(m,n)的最小和,它可由min{f[m-1]
+grid[m]
,f[m][n-1]+grid[m]
}得到,然后注意m=0 || m=1 || n=0 || n=1的临界条件即可。
class Solution { private: vector<vector<int> > f; public: int minPath(int m, int n, vector<vector<int> > &grid) { if (m==0 || n==0) { return 0; } if (f[m] != 0) { return f[m] ; } if (m == 1 && n != 1) { f[m] = minPath(m,n-1,grid) + grid[m-1][n-1]; return f[m] ; } if (m != 1 && n == 1) { f[m] = minPath(m-1, n, grid) + grid[m-1][n-1]; return f[m] ; } if (m == 1 && n == 1) { f[m] = grid[m-1][n-1]; return f[m] ; } int top = minPath(m-1, n, grid); int left = minPath(m, n-1, grid); f[m] = ((left <= top) ? left + grid[m-1][n-1] : top + grid[m-1][n-1]); return f[m] ; } int minPathSum(vector<vector<int> > &grid) { int m = grid.size(),i,j; if (m == 0) { return 0; } int n = grid[0].size(); f.resize(m+1); vector<int> line; for(i=0; i<=m; ++i) { line.clear(); line.resize(n+1); for(j=0; j<=n; ++j) line[j]= 0; f[i]= line; } return minPath(m,n,grid); } };
相关文章推荐
- LeetCode-Minimum Path Sum
- Minimum Path Sum
- 【数组】Minimum Path Sum
- leetcode minimum path sum
- Minimum Path Sum
- LeetCode64:Minimum Path Sum
- Leetcode: Minimum Path Sum
- Minimum Path Sum
- leetcode -- Minimum Path Sum
- Minimum Path Sum
- leetcode第一刷_Minimum Path Sum
- leetcode | Minimum Path Sum
- LeetCode || Minimum Path Sum
- LeetCode || Minimum Path Sum
- Leetcode 64 Minimum Path Sum
- Minimum Path Sum
- LeetCode - 62/63/64 - Unique Paths/Minimum Path Sum
- 【LeetCode】Minimum Path Sum
- leetcode Minimum Path Sum
- Minimum Path Sum