zoukankan      html  css  js  c++  java
  • [LeetCode]Triangle

    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).

    今天的最后一题Triangle是经典的动态规划问题,第i行第j个节点接收来自第i-1行第j-1个节点和第j个节点的消息,计算出到达自己的最短路径,再将消息向下层传播。需要两个数组,一个记录上一行的路径长度,一个计算当前行的路径。

    代码

     1 class Solution {
     2 public:
     3     const int INF=100000;
     4     int minimumTotal(vector<vector<int> > &triangle) {
     5         // Note: The Solution object is instantiated only once and is reused by each test case.
     6         int n = triangle.size();
     7         // 若triangle为空,返回0
     8         if(n==0)
     9             return 0;
    10         
    11         vector<int> prev_sum = triangle[0];
    12         vector<int> cur_sum;
    13         for(int i=1; i<n; ++i)
    14         {
    15             int rnum = triangle[i].size(); // number of elements in a row
    16             for(int j=0; j<rnum; ++j)
    17             {
    18                 int left = j>0?prev_sum[j-1]:INF; //最左侧节点和最右侧节点的处理
    19                 int right = j<rnum-1?prev_sum[j]:INF;
    20                 int cur = left<right?left:right;
    21                 cur += triangle[i][j]; // 计算从根节点到此节点的最短路径
    22                 cur_sum.push_back(cur);
    23             }
    24             prev_sum = cur_sum;
    25             cur_sum.clear();
    26         }
    27         // 在三角形底部找到最小路径值
    28         int minpath = prev_sum[0];
    29         for(int i=1; i<n; ++i)
    30             minpath = prev_sum[i]<minpath?prev_sum[i]:minpath;
    31             
    32         return minpath;
    33     }
    34 };
    Triangle
  • 相关阅读:
    Hadoop添加节点的方法
    CSS中如何实现DIV居中
    Python新手入门教程,从环境准备到掌握基本编程
    八、使用pull解析器操作xml文件
    九、使用SharedPreferences进行数据存储
    十八、发送xml数据给服务器
    四、对应用进行单元测试
    二、短信发送器
    一、电话拨号器
    十四、ContentProvider往通讯录添加联系人和获取联系人
  • 原文地址:https://www.cnblogs.com/practice/p/3394484.html
Copyright © 2011-2022 走看看