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;
        
    }
   
}
相关推荐
小bo波6 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
nanxun8861 天前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103511 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师1 天前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师2 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_02 天前
mac(m5)平台编译openjdk
java
唐青枫3 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马3 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261353 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261353 天前
Java 打印 Word 文档:从基础打印到高级设置
java