给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

例如,给定三角形:

[
     [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. 三角形最小路径和相关推荐

  1. leetcode - 120. 三角形最小路径和

    120. 三角形最小路径和 ------------------------------------------ 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如 ...

  2. Leetcode 120. 三角形最小路径和 (每日一题 20210927)

    给定一个三角形 triangle ,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点 ...

  3. LeetCode 120. 三角形最小路径和(动态规划)

    题目描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径 ...

  4. Leetcode 120. 三角形最小路径和 解题思路及C++实现

    解题思路: 这是一个典型的动态规划问题,定义一个数组  dp,dp[i] (tmp[i]也是)表示到达当前行第 i 个元素的最小路径和. 所以只需要定义一个1维数组dp(n, 0),每循环遍历第 i ...

  5. LeetCode 120. 三角形最小路径和

    思路: 从下(倒数第二行)往上开始计算,找到最先和之后,每一行的值重新赋值,直到最顶层就是最小值了. public int minimumTotal(List<List<Integer&g ...

  6. leetcode--笔记——120. 三角形最小路径和

    120. 三角形最小路径和 给定一个三角形 triangle ,找出自顶向下的最小路径和. 每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一 ...

  7. 120. 三角形最小路径和

    给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点. 例如,给定三角 ...

  8. 【Java语言】力扣系列----120. 三角形最小路径和

    给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点. 例如,给定三角 ...

  9. 算法:三角形最小路径和

    题目 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [[2],[3,4],[6,5,7],[4,1,8,3] ] 1 2 3 4 5 6 自顶向 ...

  10. leetcode 思路——64. 最小路径和——174. 地下城游戏

    leetcode 思路--64. 最小路径和--174. 地下城游戏 64. 最小路径和 174. 地下城游戏 64. 最小路径和 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角 ...

最新文章

  1. 网页(Webpage)粒度分析算法
  2. MMD_5a_Clustering
  3. Ext.js Tree
  4. SilverLight显示中文字(一)
  5. 【BZOJ3876】[Ahoi2014]支线剧情 有上下界费用流
  6. MSSqlServer基础学习01
  7. 海外服务器搭建网站访问很慢,海外服务器访问速度变慢了怎么办
  8. CC.Net 全接触系列之二: CCRC.Net : CC.Net 的一种另类使用方式
  9. java基础——自动装箱与拆箱
  10. 建议让游客参与修长城
  11. SQL中ALTER TABLE 语句
  12. 计算机上怎么计算x的n次方,计算x的n次方(用函数)
  13. Linux桌面环境(桌面系统)大比拼[附带优缺点]
  14. 为什么 1KB 等于 1024 B
  15. 交换机SNMP V3版本配置
  16. Linux的体系结构
  17. DFS(深度优先搜索)学习笔记(C语言版本)
  18. Tomcat官网地址
  19. 三种js轮播实现方式详解(看一遍就会)
  20. 离散型调节变量——该如何设定模型?

热门文章

  1. 基于感知机Perceptron的鸢尾花分类实践
  2. LeetCode 980. 不同路径 III(DFS+回溯)
  3. LeetCode 312. 戳气球(DP,难)
  4. 1.Redis简介与基本命令
  5. R语言第五讲 之R语言 变量
  6. python中如何输入矩阵_python - 如何向矩阵中添加向量_numpy_酷徒编程知识库
  7. 你的模型真的陷入局部最优点了吗?
  8. 写给我的女神,一个用灵魂歌唱的小精灵
  9. 史上最清楚的BP算法详解
  10. 为Spring Cloud Ribbon配置请求重试(Camden.SR2+)