zoukankan      html  css  js  c++  java
  • LeetCode 120. Triangle

    120. Triangle (三角形最小路径和)

    链接:

      https://leetcode-cn.com/problems/triangle/

    题目:

      给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

      例如,给定三角形:

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

    思路:

      简单题,自顶向下或者自底向上方法都行,以第三行的5作为例子,自顶向下值有3,4能移动到它,之后也只能移动到1,8.只需要将能到达该点的两个数取最小的,加入这个数。

      自顶向下:

        第二行:3->3+2=5, 4->4+2=6

        第三行:6->6+5->11, 5->5+min(5,6)=10, 7->7+6=13

        第四行:4->4+11=15, 1->1+min(11,10)=11, 8->8+min(10,13)=18, 3->3+13=16.

        最小和为11.

      自底向上:

        这样可以减少一些需要特殊考虑的地方,思路相同,只不过上下顺序变化,比如第三行的5,可以增加min(1,8),一直到最上层。

      (这题思路简单,但是我敲的时候忘了List<List<Integer>>要怎么用,贼尴尬)

    代码:

     1  public int minimumTotal(List<List<Integer>> triangle) {
     2         for (int i = triangle.size() - 2; i >= 0; i--) 
     3             for (int j = 0; j < triangle.get(i).size(); j++) 
     4             {
     5                 int min = Math.min(triangle.get(i + 1).get(j), triangle.get(i + 1).get(j + 1));
     6                 triangle.get(i).set(j, triangle.get(i).get(j) + min);   
     7             }
     8                     
     9         return triangle.get(0).get(0);
    10     }
  • 相关阅读:
    插入迭代器
    operator[] 和 insert
    STL注意比较函数
    remove、erase
    reserve的使用
    allocator
    【转】【模板】求割点和桥
    【模拟,时针分针秒针两两夹角】【没有跳坑好兴奋】hdu
    【强连通分量分解】
    【模拟ACM排名】ZOJ-2593 Ranking (Andrew Stankevich’s Contest #5)
  • 原文地址:https://www.cnblogs.com/blogxjc/p/11141665.html
Copyright © 2011-2022 走看看