[leetcode.com]算法题目 - Triangle
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.

1 class Solution { 2 public: 3 int minimumTotal(vector<vector<int> > &triangle) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 7 } 8 };
思路:假设三角形共有n行,题目中看出第i行共有i个元素。从top到bottom,我们只考虑minimum path的最后一步是停在了这n个元素的哪一个上面。用数组min_sum(k)表示最后一行到达第k个元素的最小路径(min_sum总长度为n),然后找出min_sum(k)中最小的元素即可。注意一下自上而下递推min_sum时候的递推公式,代码如下:

1 class Solution { 2 public: 3 int minimumTotal(vector<vector<int> > &triangle) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 7 8 int n = triangle.size(); 9 if (0 == n) return 0; 10 if (1 == n) return triangle[0][0]; 11 12 int *min_sum = new int[n]; 13 for(int i=0; i<n;i++) 14 min_sum[i] = 0; 15 16 min_sum[0]=triangle[0][0]; 17 for(int i=1;i<n;i++){ 18 for(int j=triangle[i].size()-1; j>=0;j--){ 19 if (0==j){ 20 min_sum[j] += triangle[i][0]; 21 }else if (triangle[i].size()-1==j){ 22 min_sum[j] = min_sum[j-1]+triangle[i][j]; 23 }else{ 24 min_sum[j] = min(min_sum[j-1], min_sum[j])+triangle[i][j]; 25 } 26 } 27 } 28 29 int minTotal = min_sum[0]; 30 for(int i=1;i<n;i++){ 31 minTotal = min(minTotal, min_sum[i]); 32 } 33 34 delete[] min_sum; 35 return minTotal; 36 } 37 38 int min(int a, int b){ 39 return (a>b?b:a); 40 } 41 };
注意:一开始的时候内部j那个循环是正着写,后来发现这样有个问题,就是有可能会使用已经变动的过的值去更新下一列。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)