[LeetCode 120, 최소 경로를 삼각형

제목 설명

삼각형을 감안할 때, 최소 및 하향식 (top-down) 경로를 찾을 수 있습니다. 각 단계는 다음 라인에 인접한 노드로 이동할 수 있습니다.

[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。请使用O(n)的空间。

문제 해결 아이디어

이 질문은, 사실, 당신이 사용할 수있는 아이디어를 어려운 투옥하지하지 않습니다 ( 1 ) O (1) 여분의 공간 문제 해결.

  • 하향식 : 우리는 원래의 사용 vector<vector<int>>& triangle자체가 상태를 저장, 경우 공간의 복잡성을 ( 1 ) O (1) .
  • 상향식 (bottom-up) : 때로는 더 간단 할 수 있습니다 문제의 방향을 변경, 당신은 경계 다양한 조건을 고려하지 수 있습니다. (I의 실현)

참조 코드

내가 실현 (하향식)

class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        int rows = triangle.size();
        for(int i = 1; i < rows; i++){
            for(int j = 0; j <= i; j++){
                int left = j-1 >= 0? triangle[i-1][j-1]: INT_MAX;
                int right = j <= i-1? triangle[i-1][j]: INT_MAX;
                triangle[i][j] = min(left, right) + triangle[i][j];
            }
        }
        
        int res = INT_MAX;
        for(int i = 0; i < rows; i++)
            res = min(res, triangle[rows-1][i]);
        return res;
    }
};

큰 형님 구현 (상향식)

class Solution {
public:
    //题解1:动态规划,自底向上,从倒数第二层开始向上求解(不用边界处理)
    //状态转移方程为:triangle[i][j]+=min(triangle[i+1][j],triangle[i+1][j+1])
    //时间复杂度为O(m*n),空间复杂度为O(1)
    int minimumTotal_1(vector<vector<int>>& triangle) {
        for(int i=triangle.size()-2;i>=0;--i){
            for(int j=0;j<triangle[i].size();++j){//每个点的路径和等于该点的值加上它正下面和右下中较小点的值
                triangle[i][j]+=min(triangle[i+1][j],triangle[i+1][j+1]);
            }
        }
        return triangle[0][0];
    }

    //题解2:降维变为一维dp,自底向上,因为其实每次只会用到上一层数据,因此不需二维数组存储所有可能情况来进行比较
    //也就是说一维dp[j]是随着i进行覆盖更新上一层的dp[j]
    int minimumTotal(vector<vector<int>>& triangle){
        int n=triangle.size(),dp[n+1];
        memset(dp,0,sizeof(dp));
        for(int i=n-1;i>=0;--i){
            for(int j=0;j<=i;++j){//第i层只有i列
                dp[j]=min(dp[j],dp[j+1])+triangle[i][j];
            }
        }
        return dp[0];
    }
};
게시 된 415 개 원래 기사 · 원 찬양 (603) ·은 15 만 + 조회수

추천

출처blog.csdn.net/ft_sunshine/article/details/104057624