zoukankan      html  css  js  c++  java
  • leetcode 31:triangle

    题目描述

    给出一个三角形,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字,
    例如,给出的三角形如下:
    [↵     [2],↵    [3,4],↵   [6,5,7],↵  [4,1,8,3]↵]
    最小的从顶部到底部的路径和是2 + 3 + 5 + 1 = 11。
    注意:
     

    如果你能只用O(N)的额外的空间来完成这项工作的话,就可以得到附加分,其中N是三角形中的行总数。

    题目分析:

    这道题的解法非常巧妙,从三角形的倒数第二行算起,这一行的数据加上下一行中自己对应列的数据和自己对应列数据的下一个二者之间的最小值,再以相同的逻辑处理倒数第三行的数据,直到第一行。这个三角形数组的第一行第一个数据就是最小的数据。

    代码如下:

     1 int minimumTotal(vector<vector<int> > &triangle) {
     2         for(int i = triangle.size() - 2;i >= 0;i--)
     3         {
     4             for(int j = 0;j <= i;j++)
     5             {
     6                 triangle[i][j] += min(triangle[i + 1][j],triangle[i + 1][j + 1]);
     7             }
     8         }
     9         return triangle[0][0];
    10     }
     
  • 相关阅读:
    python 八进制数
    python hmac加盐
    python contextlib
    python hashlib
    python struct
    python namedtuple
    python datetime timezone 时区转化
    Android核心基础(手机卫士的一个知识点总结)
    TabHost结合RadioButton实现主页的导航效果
    Android SDK更新失败最新解决方案
  • 原文地址:https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/13512418.html
Copyright © 2011-2022 走看看