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

    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.

    [解题思路]

    该题是经典的DP问题,状态可以定义成dp[node]表示从当前node到bottom的最小路径和,对于最下面一层,因为它们是最底层,故它们到bottom的最小路径和就是它们自身;再往上一层,如节点6,它到达bottom的最小路径和即为节点4与节点1之间的最小值加上节点6自身的值

    由以上分析得出状态迁移方程:

    dp[node] = value[node] + min(dp[child1], dp[child2])

    另外本题要求时间复杂度为:O(n), n为三角形的行数

     1 public int minimumTotal(ArrayList<ArrayList<Integer>> triangle) {
     2         // Start typing your Java solution below
     3         // DO NOT write main() function
     4         if(triangle == null || triangle.size() == 0){
     5             return 0;
     6         }
     7         
     8         int row = triangle.size();
     9         int[] num = new int[row];
    10         for(int i = row - 1; i >= 0; i--){
    11             int col = triangle.get(i).size();
    12             for(int j = 0; j < col; j++){
    13                 if(i == row - 1){
    14                     num[j] = triangle.get(i).get(j);
    15                     continue;
    16                 }
    17                 num[j] = Math.min(num[j], num[j+1]) + triangle.get(i).get(j);
    18             }
    19         }
    20         return num[0];        
    21     }
  • 相关阅读:
    html 中 #include file 的用法
    人人网FED CSS编码前端开发规范
    (转载)css垂直水平居中的整理
    CSS负边距自适应布局三例
    (转载)无缝滚动图片的js和jquery两种写法
    用css3实现鼠标移进去当前亮其他变灰
    应急响应
    扫描工具介绍
    入侵检测
    安全防护与加固
  • 原文地址:https://www.cnblogs.com/feiling/p/3269609.html
Copyright © 2011-2022 走看看