本文主要是介绍leetcode 931.下降路径最小和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:线性DP
其实这道题和那一道典型的三角形求和题很相似,与此题相比,做了以下几个变动:
第一,就是对于状态变多了一个,不再是从下方的左右了,而是正下和左右,三个状态;
第二,就是对于最佳结果求值的时候,需要从最后我们遍历出来的那第一行dp里面选出来一个最小值才行,不能直接上结果。
上代码:
class Solution {
public:int minFallingPathSum(vector<vector<int>>& matrix) {int n=matrix.size();if(n==0)return 0;if(n==1)return matrix[0][0];vector<vector<int>>dp(n+2,vector<int>(n+2,INT_MAX));for(int i=0;i<n;i++)dp[n][i+1]=matrix[n-1][i];for(int i=n-1;i>=1;i--){for(int j=1;j<=n;j++){dp[i][j]=min(dp[i+1][j],min(dp[i+1][j+1],dp[i+1][j-1]))+matrix[i-1][j-1];}}int res=INT_MAX;for(int i=1;i<=n;i++){res=min(res,dp[1][i]);}return res;}
};
这篇关于leetcode 931.下降路径最小和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!