LeetCode---Triangle
来源:互联网 发布:网络修真小说排行榜 编辑:程序博客网 时间:2024/06/10 16:26
题目大意:给出一个三角形数组,求出从顶部到底部的最小路径和。
算法思想:
1.采用一个2维数组记录从顶部到当前位置的最小路径和。(滚动数组的原理)
2.遍历三角形数组,对于当前位置的最小路径和有3种情况。
(1)处于三角形的内部,则V[1][j]=min(V[0][j],V[1][j-1])+triangle[i][j].
(2) 处于三角形的左边界,则V[1][j]=V[0][j]+triangle[i][j];
(3) 处于三角形的右边界,则V[1][j]=V[0][j-1]+triangle[i][j];
3.注意遍历数组最后一行时,V不滚动。
4.遍历V[1][i],找出最小路径和。
代码如下:
class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { int n=triangle.size(); if(n==0) return 0; if(n==1) return triangle[0][0]; int V[2][n]; memset(V,0,sizeof(V)); V[0][0]=triangle[0][0]; for(int i=0;i<n;++i){ if(i==0) continue; for(int j=0;j<=i;++j){ if(j!=0&&i!=j) V[1][j]=min(V[0][j-1],V[0][j])+triangle[i][j]; if(j==0) V[1][j]=V[0][j]+triangle[i][j]; if(i==j) V[1][j]=V[0][j-1]+triangle[i][j]; } if(i==n-1) break; for(int k=0;k<n;++k){ V[0][k]=V[1][k]; V[1][k]=0; } } int Min=V[1][0]; for(int i=1;i<n;++i){ if(V[1][i]<Min) Min=V[1][i]; } return Min; }};
0 0
- LeetCode : Triangle
- [LeetCode] Triangle
- [Leetcode] Triangle
- [LeetCode] Triangle
- 【leetcode】Triangle
- LeetCode - Triangle
- [LeetCode]Triangle
- [Leetcode]Triangle
- [leetcode]Triangle
- Leetcode: Triangle
- [LeetCode] Triangle
- LeetCode-Triangle
- [leetcode] Triangle
- [LeetCode] Triangle
- LeetCode - Triangle
- 【Leetcode】Triangle
- LeetCode | Triangle
- [leetcode]Triangle
- mongodb3.x认证
- UVA 题目11584 - Partitioning by Palindromes(DP)
- 深刻理解Linux进程间通信(IPC)
- Callable与Future的介绍
- Python深入:Distutils发布Python模块
- LeetCode---Triangle
- 浅析lua异常捕获处理机制
- 【UE4/C++】绑定输入响应
- sqllite中创建默认时间
- 27.Factorial Trailing Zeroes(求n!有几个0)
- iOS使用zbar以及AVFoundation实现二维码扫描
- Oracle的substr函数简单用法
- MATLAB在数学中的应用
- 关于python的类