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;
        
    }
   
}
相关推荐
benbenAItalk5 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl5 小时前
Java学习二 基本语法2, 算术运算符
java·学习
niucloud-admin5 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885725 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
滕州市燕猫虎计算机科技工作室个体工商户5 小时前
Java锁
java·开发语言
零依赖极客6 小时前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm
shehuiyuelaiyuehao7 小时前
1计算机是如何工作的
java·计算机网络
letisgo58 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理
水域安全老周8 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
三8448 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker