力扣64. 最小路径和

题目:

 

这到题目呢,我们可以采用动态规划做。

从题目要求出发,我们只能够向下或者是向右,因此想要到达一些点有一个或者多个路径。因此我们可以把状态分解为2个子问题。

状态1.只有一条路走的地方(也就是第一行和第一列)

状态2.有多条路可以走的地方(剩余部分)

然后我们可以通过递归的方式来计算路径的和

第一行

for (int i = 1; i < width; i++)//从第一行第二个数开始进行加
		obj[0][i] += obj[0][i - 1];

第一列

for (int i = 1; i < length; i++)//从第一列的第二个数开始加
		obj[i][0] += obj[i-1][0];

剩余部分

for (int i = 1; i < length; i++)
		for (int j = 1; j < width; j++)
			obj[i][j] += min(obj[i - 1][j], obj[i][j - 1]);

 整体代码

class Solution {
public:
int minPathSum(vector<vector<int> >& obj) {
    if (obj.size() == 0) return 0;
	int length = obj.size();//数组的长
    int width = obj[0].size();//数组的宽
	for (int i = 1; i < width; i++)
		obj[0][i] += obj[0][i - 1];
	for (int i = 1; i < length; i++)
		obj[i][0] += obj[i-1][0];
	for (int i = 1; i < length; i++)
		for (int j = 1; j < width; j++)
			obj[i][j] += min(obj[i - 1][j], obj[i][j - 1]);
	return obj[length - 1][width - 1];
 }
};

景sl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值