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

1.题目

2.思路

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

(2)初始化第一行,dp[0][0]=grid[0][0]

(3)递推公式

dp[i][j]=grid[i][j]+Math.min(dp[i-1][j],dp[i-1][j-1])

(4)寻找边界条件

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

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

例子

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

f[i][0] = f[i−1][0] + c[i][0] ,左边缘路径,只能直往下走。

f[i][i] = f[i−1][i−1] + c[i][i] , 右边缘路径,也只能直往下走。

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;
        
    }
   
}
相关推荐
皮皮林5515 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河5 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程8 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅10 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者11 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺11 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart12 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP13 小时前
MyBatis-mybatis入门与增删改查
java
孟陬16 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端