leetCode刷题归纳-Dynamic Programming(64. Minimum Path Sum)
2017-06-10 13:46
435 查看
题目描述
Given a m x n grid filled with non-negative numbers, find a path fromtop 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.
解题思路
求从左上角到右下角加权最短路径的问题,只能向右或者向下移动,和之前那个求unique path的问题很相似,只是在处理的过程中将最优化目标换成当前的加权和,解法如下(1)二维数组表示状态,空间复杂度O(m*n)
class Solution { public: int minPathSum(vector<vector<int>>& grid) { int m=grid.size(); int n=grid[0].size(); vector<vector<int>>sum(m,vector<int>(n,grid[0][0])); for(int i=1;i<m;i++) sum[i][0]=sum[i-1][0]+grid[i][0]; for(int j=1;j<n;j++) sum[0][j]=sum[0][j-1]+grid[0][j]; for(int i=1;i<m;i++) for(int j=1;j<n;j++) sum[i][j]=min(sum[i-1][j],sum[i][j-1])+grid[i][j]; return sum[m-1][n-1]; } };
(2)一维数组表示状态,空间复杂度O( min(m,n) )
class Solution { public: int minPathSum(vector<vector<int>>& grid) { int m=grid.size(); int n=grid[0].size(); vector<int>cur(m,grid[0][0]); for(int i=1;i<m;i++) cur[i]=cur[i-1]+grid[i][0]; for(int j=1;j<n;j++){ cur[0]+=grid[0][j]; for(int i=1;i<m;i++) cur[i]=min(cur[i-1],cur[i])+grid[i][j]; } return cur[m-1]; } };
相关文章推荐
- Leetcode:64. Minimum Path Sum
- (Java)LeetCode-64. Minimum Path Sum
- DP问题—Leetcode 64. Minimum Path Sum
- LeetCode -- 64. Minimum Path Sum
- LeetCode 64. Minimum Path Sum
- leetcode题解-64. Minimum Path Sum
- LeetCode 64. Minimum Path Sum
- LeetCode 64. Minimum Path Sum(最小路径和)
- LeetCode 64. Minimum Path Sum
- leetcode - 64. Minimum Path Sum
- leetcode-64. Minimum Path Sum
- leetcode_middle_60_64. Minimum Path Sum
- leetcode---64. Minimum Path Sum
- leetcode No64. Minimum Path Sum
- [leetcode] 64. Minimum Path Sum
- <LeetCode OJ> 64. Minimum Path Sum
- Leetcode:64. Minimum Path Sum
- LeetCode 64. Minimum Path Sum(最小和的路径)
- leetcode 64. Minimum Path Sum
- Leetcode 64. Minimum Path Sum