---恢复内容开始---

题目的链接

简单的动态规划题,使用了二维dp数组就能很好的表示。

由于有边界的问题,所以这个dp数组为 dp[n+1][n+1]。

dp[i][j]意思是终点为(i-1,j-1)点的路径最小和。

我们需要把这个三角形变成方阵来看,先看看样例:

[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]

变成方阵之后就变成了

[

[2, INT_MAX,INT_MAX, INT_MAX],

[3,               4,INT_MAX, INT_MAX],

[6,               5,             7, INT_MAX],

[4,               1,             8,              3],

]

有上面方阵很容易得出这个状态转移方程为

dp[i][j]=min(dp[i-1][j-1],dp[i-1][j])+triangle[i-1][j-1];

为了避开数组越界(人i=0或j=0)的问题,我们的dp数组容量比triange大一:即triangle[i][j]->dp[i+1][j+1]

class Solution {
public:
int minimumTotal(vector<vector<int>> &triangle)
{
size_t n = triangle.size();
int dp[n + ][n + ];
memset(dp, 0x3f, sizeof(dp));
int ans = INT_MAX;
dp[][] = triangle[][];
for (size_t i = ; i <= n; i++)
{
for (size_t j = ; j <= triangle[i - ].size(); j++)
{
dp[i][j] = min(dp[i - ][j - ], dp[i - ][j]) + triangle[i-][j-];
}
}
for (size_t i = ; i <= n; i++)
{
ans = min(ans, dp[n][i]);
}
return ans;
}
};

或者根本不用再建立一个新的dp数组,而是直接在triangle数组上进行操作。比如

class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if(triangle.size() == || triangle[].size() == ) return ;
int n = triangle.size();
for(int i = n - ; i >= ; i--)
for(int j = ; j < i + ; j++)
triangle[i][j] += min(triangle[i+][j], triangle[i+][j+]);
return triangle[][];
}
};

这一题的升级版问题可以看我的另一篇随笔: 下降路径最小和

[Leetcode]120.三角形路径最小和的更多相关文章

  1. Java实现 LeetCode 120 三角形最小路径和

    120. 三角形最小路径和 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...

  2. [Leetcode]931.下降路径最小和

    题目链接 这一题目首先需要弄懂题目的意思,下降路径最小和指的是在方阵中可以从上往下行走,走过后获得的值最小,方向可以是走左下,右下,直下. 题目和传统的动态规划一样,把边界的值先初始化,然后通过状态转 ...

  3. leetcode 120. 三角形最小路径和 JAVA

    题目: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和 ...

  4. LeetCode 120——三角形最小路径和

    1. 题目 2. 解答 详细解答方案可参考北京大学 MOOC 程序设计与算法(二)算法基础之动态规划部分. 从三角形倒数第二行开始,某一位置只能从左下方或者右下方移动而来,因此,我们只需要求出这两者的 ...

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

    题目描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径 ...

  6. leetcode 120. 三角形最小路径和 及 53. 最大子序和

    三角形最小路径和 问题描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...

  7. [LeetCode 120] - 三角形(Triangle)

    问题 给出一个三角形,找出从顶部至底部的最小路径和.每一步你只能移动到下一行的邻接数字. 例如,给出如下三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 从顶部至底部的最 ...

  8. LeetCode 5129. 下降路径最小和 II Minimum Falling Path Sum II

    地址 https://leetcode-cn.com/contest/biweekly-contest-15/problems/minimum-falling-path-sum-ii/ 题目描述给你一 ...

  9. LeetCode 931. 下降路径最小和 详解

    题目详情 给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和. 下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素.在下一行选择的元素和当前行所选元素最多相隔一列. 示例: ...

随机推荐

  1. Mysql命令drop database:删除数据库

    drop命令用于删除数据库. drop命令格式:drop database <数据库名>; 例如,删除名为 xhkdb的数据库:mysql> drop database xhkdb; ...

  2. R入门(一)

    简单的算术操作和向量运算 向量赋值:函数c( ),参数可以是一个或多个数,也可以是向量 赋值符号‘<-’ 向量运算:exp(),log(),sin(),tan(),sqrt(),max(),mi ...

  3. (19)3 moons and a planet that could have alien life

    https://www.ted.com/talks/james_green_3_moons_and_a_planet_that_could_have_alien_life/transcript00:1 ...

  4. Educational Codeforces Round 61 D 二分 + 线段树

    https://codeforces.com/contest/1132/problem/D 二分 + 线段树(弃用结构体型线段树) 题意 有n台电脑,只有一个充电器,每台电脑一开始有a[i]电量,每秒 ...

  5. Mysql通过sql语句添加约束和查看约束

    一:添加约束 1.添加唯一约束:alter table student add constraint uk_name unique(name); 2.添加外键约束: alter table 表名 ad ...

  6. 开机logo以及两种修改开机动画方法

    Android开机画面总共有三屏 一.第一屏:开机logo 1.选张png格式的图片,在Linux任意下执行(安装工具): sudo apt-get install pnmtoplainpm 2.在所 ...

  7. Window下同一台服务器部署多个tomcat服务简易教程

    第一步:解压两份tomact 分别为tomactserver01和tomactserver02文件夹 第二.配置tomact的环境变量 分别为 第三步:分别修改tomact的bin目录下的catali ...

  8. AngularJS的$location基本用法和注意事项

    一.配置config app.config([ '$locationProvider', function($locationProvider) { $locationProvider.html5Mo ...

  9. java中的中文字符转码技术

    package com.yin.test; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; impor ...

  10. C++插件架构浅谈与初步实现

    一.插件架构初步介绍 想到写本博客,也没想到更好的名字,目前就先命这个名吧.说到插件架构,或许大部分IT从业者都听过或者某些牛人也自己实现过稳定高效的插件框架.目前有很多软件以及库都是基于插件架构,例 ...