例如:当输入[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]时,对应的返回值为12,
所选择的最小累加和路径如下图所示:
示例1
输入:
[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]
返回值:
12示例2
输入:
[[1,2,3],[1,2,3]]
返回值:
7
class Solution { public: /** * * @param matrix int整型vector<vector<>> the matrix * @return int整型 */ int minPathSum(vector<vector<int> >& matrix) { // write code here if (matrix.size() == 0 && matrix[0].size() == 0) return 0; int n = matrix.size();//二维数组外层的大小 int m = matrix[0].size();//二维数组内层的大小 vector<int> dp(m, 0);//定义一个m大小的容器 dp,并将其初始化为0 dp[0] = matrix[0][0];//将二维数组里面的元素放进一维数组里面 for (int i = 1; i < m; ++i) dp[i] = dp[i - 1] + matrix[0][i];//将二维数组里面的行的个数叠加起来,类似,1,3,4,8... for (int i = 1; i < n; ++i) { dp[0] = dp[0] + matrix[i][0];将二维数组里面的列的个数叠加起来加赋值给dp[0] for (int j = 1; j < m; ++j) dp[j] = matrix[i][j] + min(dp[j - 1], dp[j]); } return dp[m - 1]; } };