leetcode 120. 三角形最小路径和

 

方法一:回溯法(用递归)

最基本可以将triangle数组看做一个邻接矩阵的变形,采用深度优先搜索的方法自顶向下遍历,如果triangle数组长度为n那么时间复杂度为O(2^n)(或者如果元素个数为N,那么复杂度N(log(N))

方法二:动态规划

自底向上递推:可以使用一维数组来完成,从而O(n)时间O(n)空间

class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        int len=triangle.size();
        int dp[len];
        for(int i=0;i<len;i++){
            dp[i]=triangle[len-1][i];
        }
        for(int i=len-2;i>=0;i--){
            for(int j=0;j<=i;j++){
                dp[j]=min(dp[j],dp[j+1])+triangle[i][j];
            }
        }
        return dp[0];
    }
};

 

posted @ 2019-05-06 10:12  Joel_Wang  阅读(259)  评论(0编辑  收藏  举报