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

    原题链接在这里:https://leetcode.com/problems/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在下一行与自己临近的两个元素的最小值加上triangle在这点本身的元素.

    dp[j] = Math.min(dp[j],dp[j+1]) + triangle.get(i).get(j).

    最后返回dp[0]即可.

    Time Complexity: O(n^2), n是triangle的高度, 每个点都走了一遍. Space: O(n).

    AC Java:

     1 class Solution {
     2     public int minimumTotal(List<List<Integer>> triangle) {
     3         if(triangle == null || triangle.size() == 0 || triangle.get(0).size() == 0){
     4             return 0;
     5         }
     6         
     7         int m = triangle.size();
     8         int n = triangle.get(m-1).size();
     9         int [] dp = new int[n+1];
    10         
    11         //dp更新从triangle下到上, 取dp[j]和dp[j+1]小值加上triangle当前点的val
    12         for(int i = m-1; i>=0; i--){
    13             List<Integer> row = triangle.get(i);
    14             for(int j = 0; j<row.size(); j++){
    15                 dp[j] = Math.min(dp[j], dp[j+1]) + row.get(j);
    16             }
    17         }
    18         
    19         return dp[0];
    20     }
    21 }
  • 相关阅读:
    最近工作
    有点感受
    日子有点快
    IDEA配置spring
    IDEA配置hibernate
    mysql插入中文乱码
    深夜配置一把struts2
    IDEA 配置SSH2
    找工作的事情
    YTU 2509: 奇怪的分式
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/4824965.html
Copyright © 2011-2022 走看看