Leetcode 120 Triangle(图解)
2016-03-26 10:40
531 查看
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
The minimum path sum from top to bottom is
11).
思路:1.题目中定义一个vector的vector存储Triangle,无须赘述。
2.然后图中红色连线是最短路线的一个目前可行小部分,用一个vector数组b来存储, 并且自底向上累计(例如
对于最底下来说 b[0]=10,b[1]=13,b[2]=10,b[3]=9 (分别对应四根连线相加的值)然后依次往上累计(红线代表选择过程) 最终选择5 4 11 2 3这条路 )。
代码如下:
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).
思路:1.题目中定义一个vector的vector存储Triangle,无须赘述。
2.然后图中红色连线是最短路线的一个目前可行小部分,用一个vector数组b来存储, 并且自底向上累计(例如
对于最底下来说 b[0]=10,b[1]=13,b[2]=10,b[3]=9 (分别对应四根连线相加的值)然后依次往上累计(红线代表选择过程) 最终选择5 4 11 2 3这条路 )。
代码如下:
#include<iostream> #include<vector> #include<algorithm> using namespace std; int minimumTotal_1(vector<vector<int> > &triangle) { for (int i = triangle.size() - 2; i >= 0; --i) for (int j = 0; j < i + 1; ++j) { triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1]); } return triangle[0][0]; } int minimun (vector<vector<int> >&triangle) { int sz = triangle.size(); vector<int>b = triangle[sz - 1]; for (int i = triangle.size() - 2; i >= 0; --i) { for (int j = 0; j < i + 1; ++j) { b[j] = triangle[i][j] + min(b[j], b[j + 1]); } } return b[0]; } int main() { vector<vector<int>>ivec{ { 3 }, { 9, 2 }, { 8, 20, 11 }, { 1, 2, 3, 4 }, { 9, 20, 11, 7, 5 } }; //cout << minimumTotal_1(ivec); cout << minimun(ivec); system("pause"); return 0; }
相关文章推荐
- [Linux]获取域名的ip地址和hostname(待续)
- 适配
- OC中的MRC内存管理方式
- 容斥原理模板
- NSObject+MZCExpansion.h
- 第一篇 小小的抱怨
- uml
- 【字符编码】Java字符编码详细解答及问题探讨
- C#中的OLEDB连接2
- makefile指定头文件和库出错的那点破事
- USACO-Section 3.2 Magic Squares(BFS)
- 相机简单使用
- 一种基于网络服务的客户端自动升级框架及其应用
- 如何在ViewPager外部获取“当前显示的页面的位置position”
- 判断java中两个对象是否相等
- 计蒜客|C++程序设计|判断质数
- 搭建6个节点的Hadoop集群
- 接口与内部类(Java核心技术卷Ⅰ)
- 华为OJ中级题-设计购物单
- sublime 字体等宽