LeetCode解题报告 120. Triangle [medium]

    xiaoxiao2021-12-14  20

    题目描述

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

    For example, given the following triangle

    [ [2], [3,4], [6,5,7], [4,1,8,3] ]

    The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).

    Note: Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.

    解题思路

    采用由底向上传输的思路,在每两层之间找到最小值,不断向上传递并相加,最后顶点的值储存的就是所求的最小值。 对于从倒数第二层开始的每个点,可选择从左下方的点或者从右下方的点走这条最终的最短路,因此比较左右下方的两个结点,取最小值,再加上自己本身,就是这个小三角形区域的最短路。对倒数第二层的每一个结点都做同样的操作,每个结点都存储的是自己所在的小三角形的最短路的和。然后依次计算倒数第三层...,直到最顶点。 状态转移方程如下: tra[i][j]=tra[i][j]+min(tra[i+1][j+1], tra[i+1][j]) return tra[0][0] 图示如下:

    复杂度分析

    O(n*n)的时间复杂度。 代码如下: class Solution { public: int minimumTotal(vector<vector<int>>& triangle) { int n=triangle.size(); if (n==0) { return 0; } else if (n==1) { return triangle[0][0]; } else{ for (int i = n-2; i>=0;--i) { for (int j=0; j<=i; j++) { triangle[i][j]+=min(triangle[i+1][j],triangle[i+1][j+1]); } } return triangle[0][0]; } } };
    转载请注明原文地址: https://ju.6miu.com/read-969635.html

    最新回复(0)