经典dp问题,当然也能dfs,大二的时候看这个题目无脑dfs,现在就可以dp啦
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size();
vector<vector<int>> dp(m, vector<int>(n, 0));
dp[0][0] = grid[0][0];
for (int i = 1; i < m; i++)
{
dp[i][0] = dp[i-1][0] + grid[i][0];//遍历第一列的出到这个点所需的最短路径和
}
for (int i = 1; i < n; i++)
{
dp[0][i] = dp[0][i-1] + grid[0][i];//遍历第一行的出到这个点所需的最短路径和
}
for (int i = 1; i < m; i++)//遍历整个二维vector得出到每个点所需路径和的最小值
{
for (int j = 1; j < n; j++)
{
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];//因为到一个点如果按顺序遍历的话只能从正上方或者左边到这个点
}
}
return dp[m - 1][n - 1];
}
};