2025年--Lc187--120. 三角形最小路径和(多维动态规划,矩阵)--Java版

1.题目

2.思路

(1)dpij数组的定义:从位置(0,0)到(i,j)的最短路径和

(2)初始化第一行,dp00=grid00

(3)递推公式

dpij=gridij+Math.min(dpi-1j,dpi-1j-1)

(4)寻找边界条件

1)最左侧元素(j0)
2)最右侧的元素(ji)

(5)终止条件,到达最后一行寻求最小值dpn-1j.

例子

java 复制代码
      [2]
     [3] [4]
    [6] [5] [7]
   [4] [1] [8] [3]

对应坐标(行号 i,列号 j):

java 复制代码
第0行: c[0][0] = 2
第1行: c[1][0] = 3, c[1][1] = 4
第2行: c[2][0] = 6, c[2][1] = 5, c[2][2] = 7
第3行: c[3][0] = 4, c[3][1] = 1, c[3][2] = 8, c[3][3] = 3

第 0 行:

java 复制代码
f[0][0] = 2

fi0 = fi−10 + ci0 ,左边缘路径,只能直往下走。

fii = fi−1i−1 + cii , 右边缘路径,也只能直往下走。

3.代码实现

java 复制代码
class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        //三角形的行数,把三角形弄成直角三角形
        int n=triangle.size();
        int[][] dp=new int[n][n];
        //初始化起点坐标
        dp[0][0]=triangle.get(0).get(0);
       
        //遍历顺序
        for(int i=1;i<n;i++){
            for(int j=0;j<=i;j++)
            {
                //判断边界条件
                //当 j = 0(即最左边的元素)时,你没有左上角的来源 f[i−1][j−1],因为最左边已经没有元素了。
                //"当前这一行最左边的节点,只能从上一行最左边的节点下来。"
                if(j==0)
                {
                    dp[i][j]=dp[i-1][j]+triangle.get(i).get(j);
                    
                }
                //判断边界条件
                //i=j,也就是本行的最右边那个元素
                //没有右上角的来源 f[i−1][j] ------ 因为上一行只有 i 个元素,而这一行有 i+1 个.只能从左上角 f[i−1][i−1] 走下来:
                else if(i==j)
                {
                    dp[i][j]=dp[i-1][j-1]+triangle.get(i).get(j);
                }
                else
                {
                dp[i][j]=triangle.get(i).get(j)+Math.min(dp[i-1][j],dp[i-1][j-1]);}
            }
        }
    int ans=dp[n-1][0];//最后一行的第一个元素
    for(int j=1;j<n;j++)
    {
        //最后一行的最小元素。
        ans=Math.min(ans,dp[n-1][j]);
    }
    return ans;
        
    }
   
}
相关推荐
workflower2 分钟前
具身智能研究对象:物理交互中的智能行为
设计模式·动态规划·软件工程·软件构建·scrum
utf8mb4安全女神4 分钟前
【rsyslog服务】把所有服务的“临界点”以上的错误都保存在/var/log/alert.log⽇志中
java·前端·javascript
带刺的坐椅11 分钟前
Solon Server 启动模式深度解析:从 0.3MB 内核到 10+ Server 插件
java·http·solon·jetty·undertow
郝学胜-神的一滴12 分钟前
干货版《算法导论》07:递归视角下的选择排序与归并排序
java·数据结构·c++·python·程序人生·算法·排序算法
掉鱼的猫25 分钟前
Solon Server 启动模式深度解析:从 0.3MB 内核到 10+ Server 插件
java·http
shehuiyuelaiyuehao26 分钟前
多线程入门
java·python·算法
星夜夏空9927 分钟前
FreeRTOS学习(7)——任务列表
java·前端·学习
han_hanker33 分钟前
BeanUtils.copyProperties 和序列化的问题
java·开发语言·spring boot
野生技术架构师35 分钟前
牛客网2026互联网大厂Java面试题汇总,附官方级答案解析
java·开发语言
AZaLEan__1 小时前
多源 BFS
java·开发语言·算法