码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 120. Triangle

时间:2020-07-03 15:34:00      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:rom   位置   size   row   href   时间   fill   ase   space   

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.

三角形最小路径和。题意是给一个N层的list,每层list有N个元素,请你求自顶而下的最小的路径和。

首先将数组变成一个直角三角形这样易于理解。

[2]

[3,4]

[6,5,7]

[4,1,8,3]

思路是自下而上的动态规划。题目求的是自上而下的最小路径和,那么也就意味着在每两个相邻的数字之间,要找出一个相对小的数字,才有可能使得整个路径最小,但是如果自上而下这样找的话,其实并不一定能找到整个路径最小的。所以这里创建一个长度为triangle.size() + 1的数组记录最后动态规划的结果。从最后一行开始扫描,在DP数组的每一个位置上的值是当前位置i的数字 + DP数组里面dp[i]和dp[i + 1]的较小的值。最后返回的是dp[0]。

时间O(n^2)

空间O(n)

Java实现

 1 class Solution {
 2     public int minimumTotal(List<List<Integer>> triangle) {
 3         int[] res = new int[triangle.size() + 1];
 4         for (int i = triangle.size() - 1; i >= 0; i--) {
 5             for (int j = 0; j < triangle.get(i).size(); j++) {
 6                 res[j] = Math.min(res[j], res[j + 1]) + triangle.get(i).get(j);
 7             }
 8         }
 9         return res[0];
10     }
11 }

 

JavaScript实现

 1 /**
 2  * @param {number[][]} triangle
 3  * @return {number}
 4  */
 5 var minimumTotal = function(triangle) {
 6     // corner case
 7     if (triangle === null || triangle.length === 0) {
 8         return 0;
 9     }
10 
11     // normal case
12     let res = new Array(triangle.length + 1).fill(0);
13     for (let i = triangle.length - 1; i >= 0; i--) {
14         for (let j = 0; j < triangle[i].length; j++) {
15             res[j] = Math.min(res[j], res[j + 1]) + triangle[i][j];
16         }
17     }
18     return res[0];
19 };

 

相关题目

118. Pascal‘s Triangle

119. Pascal‘s Triangle II

120. Triangle

LeetCode 题目总结

[LeetCode] 120. Triangle

标签:rom   位置   size   row   href   时间   fill   ase   space   

原文地址:https://www.cnblogs.com/cnoodle/p/13230315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!