题目:
题解:
- 动态规划
- 本题属于120. 三角形最小路径和的子题,区别在于每个点的路径和可以依靠上一行的连续的三个元素,也就是说我们的遍历每个点可以上一行的三个路径和选择最小的即可,这样就表示可以取上一行的任一数据了。至于自顶向下寻找最小路径和,还是从下到上寻找,这个没啥区别。
代码如下:
class Solution {
public:
//题解:动态规划,自顶向下对原数组进行操作,时间复杂度O(n2),空间复杂度O(1)
int minFallingPathSum(vector<vector<int>>& A) {
int n=A.size();
for(int i=1;i<n;++i){
A[i][0]+=min(A[i-1][0],A[i-1][1]);//处理行的第一个数据
for(int j=1;j<n-1;++j){//处理行的中间数据
A[i][j]+=min(A[i-1][j-1],min(A[i-1][j],A[i-1][j+1]));
}
A[i][n-1]+=min(A[i-1][n-1],A[i-1][n-2]);//处理行的最后一个数据
}
int result=INT_MAX;
for(int num:A[n-1]){//最小路径和在最后一行寻找
result=min(result,num);
}
return result;
}
};