力扣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

猜你喜欢

转载自blog.csdn.net/zjsru_Beginner/article/details/121289382