最小路径和

题目

Alt

思路

本题有点类似于杨辉三角形和不同路径问题
本题是要求解一条路径,该路径上的数字之和最小。限制条件就是每次只能向下或者向右移动一步,那么我们如何使用动态规划解决本道题呢?

我们还是设置一个dp表,dp[i]表示从左上角到本点i的最小数字总和。那么一个点i只能由它的左边或者上边走过来,那么我们就比较这两个方向的大小,选取最小的那个与i点的数字相加,用状态转移方程表示就是:dp[i]=min(dp[i-],dp[i])+nums[i].
我们需要处理的边界就是:每一行的第一列只能由它的上边转换而来。
相关代码如下:

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        int m = grid.size();
		int n = grid[0].size();
		vector<int> res(grid[0]);
		for (int j = 0; j < n; j++) {
			if (j == 0)
				res[j] = res[j] ;
			else {
				res[j] = res[j-1] + grid[0][j];
			}
		}
		for (int i = 1; i < m; i++) {
			for (int j = 0; j < n; j++) {
				if (j == 0)
					res[j] = res[j] + grid[i][j];
				else {
					res[j] = min(res[j - 1], res[j]) + grid[i][j];
				}
			}
		}
		return res[n-1];
    }
};
```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值