120. Triangle
来源:互联网 发布:尚牌安全套怎么样 知乎 编辑:程序博客网 时间:2024/06/10 16:58
这道题使用动态规划,开始我是从顶端到底端进行
状态转移方程:
triangle[i][j]=min(triangle[i-1][j-1],triangle[i-1][j])+triangle[i][j];
这样做比较麻烦,等于求出了从顶端到底端每一个点的最小路径和,最后还要从底端中求出最小的值
class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { if(triangle.size()<1) return 0; for(int i=1;i<triangle.size();i++) { for(int j=0;j<=i;j++) { if(j==0) triangle[i][j]+=triangle[i-1][j]; else if(j==i) triangle[i][j]+=triangle[i-1][j-1]; else triangle[i][j]+=min(triangle[i-1][j-1],triangle[i-1][j]); } } int min_value=triangle[triangle.size()-1][0]; for(int i=1;i<triangle.size();i++) if(triangle[triangle.size()-1][i]<min_value) min_value=triangle[triangle.size()-1][i]; return min_value; }};
第二种方法:从低端到顶端求最小路径,这样顶端的值就是最小路径和
状态方程:
triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1])
class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { int n=triangle.size(); if(n<1) return 0; //if(n==1) // return triangle[0][0]; for(int i=n-2;i>=0;i--) { for(int j=0;j<=i;j++) { triangle[i][j]+=min(triangle[i+1][j+1],triangle[i+1][j]); } } return triangle[0][0]; }};
0 0
- 120. Triangle
- 120. Triangle
- 120. Triangle
- 120. Triangle
- 120. Triangle
- 120. Triangle
- 120. Triangle
- 120.Triangle
- 120. Triangle
- 120. Triangle
- 120. Triangle
- 120. Triangle
- 120. Triangle
- 120. Triangle
- 120.Triangle
- 120. Triangle
- 120. Triangle
- 120. Triangle
- Java系列(二)__Java基本概念
- php结合redis实现高并发下的抢购、秒杀功能
- 无线网络发射选址 NOIP2014 提高组 Day2 T1
- MAC OSX 配置jdk环境变量
- uboot启动流程详解(3)-cpu_init_cp15
- 120. Triangle
- Python 含参构造函数
- POJ 3522 slim span Kruskal
- 元素分类
- Java系列(一)__Java简介
- LeetCode 102 Binary Tree Level Order Traversal(二叉树的层次遍历)
- 浏览器证书基础介绍和如何测试本地浏览器的HTTPS的完备性
- 升级CentOS6.5安装镜像中的Linux内核版本
- 使用handler来实现计时操作