力扣 最小路径和

又是一道动态规划基础例题。

题目

这道题可以类似不同路径。先把左上角格子进行填充,然后用一个数组去更新每走到一个格的数字总和,首先处理边界问题,把最左边的列只能由上方的行与原来的格子数值的和,同理,最上方的行只能由作左边的行与原来的格子数值的和,然后像上次路径dp那样做遍历,直到取出右下角的坐标的数值即可。

java 复制代码
class Solution {
     public int minPathSum(int[][] grid) {
        // f[m][n] = Math.min(f[m-1][n],f[m][n-1]) + grid[m][n]

        int m = grid.length ;
        int n = grid[0].length;
        int[][] dp = new int[m][n];
        dp[0][0] = grid[0][0];
        for ( int i = 1 ; i < m ; i++ ) {
            dp[i][0] = grid[i][0]+dp[i-1][0];
        }

        for ( int i = 1 ; i < n ; i++ ) {
            dp[0][i] = grid[0][i] + dp[0][i-1];
        }

        for ( int i = 1 ;  i < m ;  i++ ) {
            for ( int j = 1 ; j < n ; j++ ) {
                dp[i][j] = grid[i][j] + Math.min(dp[i-1][j],dp[i][j-1]);
            }
        }
        return dp[m-1][n-1];
    }
}

也可以优化成滚动数组。

java 复制代码
class Solution {
    public int minPathSum(int[][] grid) {
        if (grid == null || grid.length == 0 || grid[0].length == 0) {
            return 0;
        }
        
        int rows = grid.length, columns = grid[0].length;
        
        // 创建一个一维数组 dp 来存储每一行的路径和
        int[] dp = new int[columns];
        
        dp[0] = grid[0][0]; // 起点处的最小路径和
        
        for (int j = 1; j < columns; j++) {
            dp[j] = dp[j - 1] + grid[0][j];
        }
        
        for (int i = 1; i < rows; i++) {
            // 第一列的位置,路径只能从上方来
            dp[0] += grid[i][0];
            
            for (int j = 1; j < columns; j++) {
                dp[j] = Math.min(dp[j], dp[j - 1]) + grid[i][j];
            }
        }
        
        // 最终的结果在 dp[columns - 1] 中,表示右下角的最小路径和
        return dp[columns - 1];
    }
}

典型路径动态规划,助你找准最好的路径。

相关推荐
数模竞赛Paid answer9 小时前
2025年MathorCup数学建模A题汽车风阻预测解题文档与程序
算法·数学建模·mathorcup
xin_nai9 小时前
LeetCode热题100(Java)(6)矩阵
java·leetcode·矩阵
代码AI弗森15 小时前
一文理清楚“算力申请 / 成本测算 / 并发评估”
java·服务器·数据库
一只幸运猫.15 小时前
2026Java 后端面试完整版|八股简答 + AI 大模型集成技术(最新趋势)
人工智能·面试·职场和发展
Old Uncle Tom15 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆15 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
小小小米粒15 小时前
Collection单列集合、Map(Key - Value)双列集合,多继承实现。
java·开发语言·windows
生信碱移15 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
智者知已应修善业16 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
摇滚侠16 小时前
expdp 查看帮助
java·数据库·oracle