IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> java leetcode之[动态规划 中等]120. 三角形最小路径和 -> 正文阅读

[数据结构与算法]java leetcode之[动态规划 中等]120. 三角形最小路径和

题目的链接在这里:https://leetcode-cn.com/problems/triangle/


题目大意

给定一个三角形 triangle ,找出自顶向下的最小路径和。

每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。


一、示意图

在这里插入图片描述

二、解题思路

动态规划

动态规划

代码如下:

class Solution {
 public int minimumTotal(List<List<Integer>> triangle) {
       //还有个边界需要处理
        if(triangle.size()==1){
            return triangle.get(0).get(0);
        }
        //三角形找出 自顶向下的最小路径之和 每一步只能移动到和他相邻的位置 也就是下一层的i的位置和i+1位置
        //这个怎么使用动态规划呢  dp[i]表示第i层的最小路径和 我感觉应该是 dp[i][j] 找最后一层 达到这个目的地的最小值
        int[][] dp=new int[triangle.size()][triangle.size()];
       // System.out.println("triangle = " + triangle.size());
        //第一层只可能是 一个
        dp[0][0]=triangle.get(0).get(0);
       // System.out.println("dp[0][0] = " + dp[0][0]);
        int res=100000;
        //然后就开始继续判断
        for(int i=1;i<dp.length;i++){
            //等到下面一层 有两个需要更新的地方
            for(int j=0;j<=i;j++){
                //j这位置 只可能是从他上一层的j和j-1的位置来找到
                if(j<1){
                    //说明上一层只有一个 那就直接上一层 加上这个对应位置的值
                    dp[i][j]=dp[i-1][j]+triangle.get(i).get(j);
                }
                //因为这数组都是空数组 还需要判断右边 不是最右边的
                 if(j>=1&&j<i){
                    //那就需要判断一下他上面那个 哪一个比较小了
                    dp[i][j]=Math.min(dp[i-1][j-1],dp[i-1][j])+triangle.get(i).get(j);
                }
                 if(j==i){
                     //说明是这一层的最后一个 理论上来说 只能是上一层的j-1个
                     dp[i][j]=dp[i-1][j-1]+triangle.get(i).get(j);
                 }
                //然后这里判断一下最后一层里的最小值
                if(i==dp.length-1){
                    //说明是最底下一层
                    res=Math.min(res,dp[i][j]);
                }
               // System.out.println("dp[i][j] = " + dp[i][j]);
            }

        }
        return res;
    }

}

在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:32:46  更:2021-11-28 11:34:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:51:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码