【LeetCode】三角形最小路径和
2024-10-05 01:20:57
【问题】给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
[],
[,],
[,,],
[,,,]
]
自顶向下的最小路径和为 (即, + + + = )。
【第一种思路】
直接暴力递归,将各种情况进行穷举,但是必定会超时,通过递归的方法我们可以得到核心的递归表达式:
triangle[x][y] += min(triangle[x+1][y], triangle[x+1][y+1]), 这是由于三角形的下一行只比上一行多一个数的规律导致的!
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
return dfs(, , triangle);
}
int dfs(int x, int y,vector<vector<int>>& triangle) {
if (x == triangle.size() )
return ;
return triangle[x][y] + min(dfs(x + , y, triangle),dfs(x + , y + , triangle));
}
};
【第二种思路】既然有了递归式,就可以把暴力递归改成动态规划了!这里说一个原地动态规划的解法!
类似于搭积木的原理,从底向上,在每一层都取两个数的最小值加到上一层去,一层层累积上去,直到顶部,最短路径就是triangle[0][0]。
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
for(int i = triangle.size()-; i >= ; --i){
for(int j = ; j < triangle[i].size(); ++j){
triangle[i][j] += min(triangle[i+][j], triangle[i+][j+]);
// triangle[i+1][j+1]不会越界,第i+1行比第i行多一个值
}
}
return triangle[][];
}
};
最新文章
- CSS盒子模型与box-sizing
- Effective Java Index
- 使用LKDBHelper 插入相同id时候应该是更新数据而不是插入新的数据
- tomcat服务器 去掉端口8080 以及项目名 直接使用IP地址访问
- 预定义异常 - PHP手册笔记
- boost 轻量级信号量
- 解决select2 在modal中搜索框无效的问题
- day01 python入门之路
- SQL实现如何计算项目进度总共天数情况、已经施工天数情况、以及施工进度百分比
- HP Elitebook 830 G5/Win10蓝屏 UcmUcsi.sys 错误解决
- Beta冲刺——第四天
- 【适合公司业务】全网最详细的IDEA里如何正确新建【普通或者Maven】的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(类似eclipse里同一个workspace下【多个子项目】并存)(图文详解)
- Shell与Bash
- conding.net或github,readme.md添加图片
- 根据前面的FtpUtil写一个demo
- polymer-developer guide-registration and lifecycle
- VS2010一调试就卡死的问题解决方案 (转)
- ubuntu 12.04下apache 配置家目录地址
- Java AOP总结
- Vue中 key keep-alive