Leetcode--120. 三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
说明:
如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。
空间复杂度O(n^2)
自底向上遍历,每个dp存的是当前位置的最小值
例如:dp[2][1]处就是他自己的值加上下一行中与他相邻的两个值中的最小值
动态方程:dp[i][j] = triangle.get(i).get(j)+java.lang.Math.min(dp[i+1][j], dp[i+1][j+1]);
提交的代码:
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int n = triangle.size();
int[][] dp = new int[n][triangle.get(n-1).size()];
int i,j;
for(i=0;i<triangle.get(n-1).size();i++)
{
dp[n-1][i] = triangle.get(n-1).get(i);
}
for(i=n-2;i>=0;i--)
{
for(j=0;j<triangle.get(i).size();j++)
{
dp[i][j] = triangle.get(i).get(j)+java.lang.Math.min(dp[i+1][j], dp[i+1][j+1]);
}
}
return dp[0][0];
}
}
完整的代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main
{
public static int minimumTotal(List<List<Integer>> triangle) {
int n = triangle.size();
int[][] dp = new int[n][triangle.get(n-1).size()];
int i,j;
for(i=0;i<triangle.get(n-1).size();i++)
{
dp[n-1][i] = triangle.get(n-1).get(i);
}
for(i=n-2;i>=0;i--)
{
for(j=0;j<triangle.get(i).size();j++)
{
dp[i][j] = triangle.get(i).get(j)+java.lang.Math.min(dp[i+1][j], dp[i+1][j+1]);
}
}
return dp[0][0];
}
public static void main(String[] args)
{
//[
//[2],
//[3, 4],
//[6, 5, 7],
//[4, 1, 8, 3]
//]
List<List<Integer>> list = new ArrayList<>();
List<Integer> subList0 = new ArrayList<>();
subList0.add(2);
List<Integer> subList1 = new ArrayList<>();
subList1.add(3);
subList1.add(4);
List<Integer> subList2 = new ArrayList<>();
subList2.add(6);
subList2.add(5);
subList2.add(7);
List<Integer> subList3 = new ArrayList<>();
subList3.add(4);
subList3.add(1);
subList3.add(8);
subList3.add(3);
list.add(subList0);
list.add(subList1);
list.add(subList2);
list.add(subList3);
System.out.println(minimumTotal(list));
}
}
Leetcode--120. 三角形最小路径和相关推荐
- leetcode - 120. 三角形最小路径和
120. 三角形最小路径和 ------------------------------------------ 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如 ...
- Leetcode 120. 三角形最小路径和 (每日一题 20210927)
给定一个三角形 triangle ,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点 ...
- LeetCode 120. 三角形最小路径和(动态规划)
题目描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径 ...
- Leetcode 120. 三角形最小路径和 解题思路及C++实现
解题思路: 这是一个典型的动态规划问题,定义一个数组 dp,dp[i] (tmp[i]也是)表示到达当前行第 i 个元素的最小路径和. 所以只需要定义一个1维数组dp(n, 0),每循环遍历第 i ...
- LeetCode 120. 三角形最小路径和
思路: 从下(倒数第二行)往上开始计算,找到最先和之后,每一行的值重新赋值,直到最顶层就是最小值了. public int minimumTotal(List<List<Integer&g ...
- leetcode--笔记——120. 三角形最小路径和
120. 三角形最小路径和 给定一个三角形 triangle ,找出自顶向下的最小路径和. 每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一 ...
- 120. 三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点. 例如,给定三角 ...
- 【Java语言】力扣系列----120. 三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点. 例如,给定三角 ...
- 算法:三角形最小路径和
题目 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [[2],[3,4],[6,5,7],[4,1,8,3] ] 1 2 3 4 5 6 自顶向 ...
- leetcode 思路——64. 最小路径和——174. 地下城游戏
leetcode 思路--64. 最小路径和--174. 地下城游戏 64. 最小路径和 174. 地下城游戏 64. 最小路径和 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角 ...
最新文章
- 网页(Webpage)粒度分析算法
- MMD_5a_Clustering
- Ext.js Tree
- SilverLight显示中文字(一)
- 【BZOJ3876】[Ahoi2014]支线剧情 有上下界费用流
- MSSqlServer基础学习01
- 海外服务器搭建网站访问很慢,海外服务器访问速度变慢了怎么办
- CC.Net 全接触系列之二: CCRC.Net : CC.Net 的一种另类使用方式
- java基础——自动装箱与拆箱
- 建议让游客参与修长城
- SQL中ALTER TABLE 语句
- 计算机上怎么计算x的n次方,计算x的n次方(用函数)
- Linux桌面环境(桌面系统)大比拼[附带优缺点]
- 为什么 1KB 等于 1024 B
- 交换机SNMP V3版本配置
- Linux的体系结构
- DFS(深度优先搜索)学习笔记(C语言版本)
- Tomcat官网地址
- 三种js轮播实现方式详解(看一遍就会)
- 离散型调节变量——该如何设定模型?
热门文章
- 基于感知机Perceptron的鸢尾花分类实践
- LeetCode 980. 不同路径 III(DFS+回溯)
- LeetCode 312. 戳气球(DP,难)
- 1.Redis简介与基本命令
- R语言第五讲 之R语言 变量
- python中如何输入矩阵_python - 如何向矩阵中添加向量_numpy_酷徒编程知识库
- 你的模型真的陷入局部最优点了吗?
- 写给我的女神,一个用灵魂歌唱的小精灵
- 史上最清楚的BP算法详解
- 为Spring Cloud Ribbon配置请求重试(Camden.SR2+)