leetcode 64 最小路径和

一、题目描述

二、解题思路

整体思路

由题意可知,本次的选择基于前面的结果,所以可以使用动态规划来解决这个问题。

具体思路

(1)dpij的含义

dpij的值表示到(i,j)位置的最小路径和。

(2)初始化

由于只能向右和向下移动,所以可以将dp数组的第一列和第一行初始化:

<1>第一行只能由起点持续右移得到,所以dp0col=dp0col-1+grid0col

<2>第一列只能由起点持续下移得到,所以dprow0=dprow-10+gridrow0;

(3)状态转移方程

中间的位置只能由其上面的位置下移或者左边的位置右移动得到,所以状态转移方程为:

dprowcol=gridrowcol+min(dprow-1col,dprowcol-1);

三、代码实现

cpp 复制代码
class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        //动态规划
        int m=grid.size();
        int n=grid[0].size();
        if(m==0||n==0) return 0;
        vector<vector<int>> dp(m,vector<int>(n,0));

        //填写dp数组
        dp[0][0]=grid[0][0];
       //填写第一行
       for(int col=1;col!=n;col++) dp[0][col]=dp[0][col-1]+grid[0][col];
       //填写第一列
       for(int row=1;row!=m;row++) dp[row][0]=dp[row-1][0]+grid[row][0];
       //填写中间位置
       for(int row=1;row!=m;row++)
        for(int col=1;col!=n;col++)
            dp[row][col]=grid[row][col]+min(dp[row-1][col],dp[row][col-1]);

        return dp[m-1][n-1];
    }
};
相关推荐
地平线开发者24 分钟前
J6B vio scenario sample
算法
BothSavage12 小时前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法
小林ixn12 小时前
从暴力到KMP:一道题彻底搞懂字符串匹配的前世今生
算法
烬羽14 小时前
字符串算法入门:从反转字符串到回文判断,面试不再慌
算法·面试
郝学胜_神的一滴14 小时前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
先吃饱再说1 天前
判断回文字符串,从一行代码到双指针优化
算法
见过夏天1 天前
C++ 基础入门完全指南
c++
黄敬峰1 天前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法