题解 | #矩阵的最小路径和#
矩阵的最小路径和
https://www.nowcoder.com/practice/7d21b6be4c6b429bb92d219341c4f8bb?tpId=295&tqId=1009012&ru=%2Fpractice%2F166eaff8439d4cd898e3ba933fbc6358&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295
开始慢慢习惯这种题目
class Solution {
public:
/**
*
* @param matrix int整型vector<vector<>> the matrix
* @return int整型
*/
int minPathSum(vector<vector<int> >& matrix) {
int row = matrix.size(), col = matrix[0].size();
// dp[i][j] 代表i*j大小矩阵的最大路径和
std::vector<std::vector<int>> dp(row + 1, std::vector<int>(col + 1, 0));
// 注意下标的差别
// 对于dp来讲,下标+1代表当前结点
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
// 只有一行
if (i == 0 && j == 0) {
dp[i + 1][j + 1] = matrix[i][j];
continue;
}
if (i == 0) {
dp[i + 1][j + 1] = matrix[i][j] + dp[i + 1][j];
continue;
}
if (j == 0) {
dp[i + 1][j + 1] = matrix[i][j] + dp[i][j + 1];
continue;
}
dp[i + 1][j + 1] = matrix[i][j] + std::min(dp[i][j + 1], dp[i + 1][j]);
}
}
return dp[row][col];
}
};