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;
        
    }
   
}
相关推荐
广州灵眸科技有限公司36 分钟前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
库克克1 小时前
【C++ 】内联函数
java·开发语言·c++
zh_xuan1 小时前
java 虚拟线程
java·开发语言·虚拟线程
jason成都1 小时前
RTKLIB Java 移植踩坑复盘:卡尔曼滤波核心逻辑修复与滑坡场景实测验证
java·开发语言
老毛肚2 小时前
juc线程通信
java·开发语言·jvm
花颜yyds2 小时前
Java 开发基础速查手册
java
没钥匙的锁13 小时前
05-Java面向对象构造器与封装
java·开发语言
aaPIXa6223 小时前
C++采样引导优化SPGO——比PGO更智能的编译器决策新方案
java·c++·人工智能
蓝银草同学3 小时前
Stream 实战:博客列表排序、过滤与分页(AI 辅助学习 Java 8)
java·前端·后端
某不知名網友4 小时前
C/C++动态内存管理,智能指针及RAlI思想。
java·c语言·c++