leetcode 64 最小路径和

一、题目描述

二、解题思路

整体思路

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

具体思路

(1)dp[i][j]的含义

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

(2)初始化

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

<1>第一行只能由起点持续右移得到,所以dp[0][col]=dp[0][col-1]+grid[0][col];

<2>第一列只能由起点持续下移得到,所以dp[row][0]=dp[row-1][0]+grid[row][0];

(3)状态转移方程

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

dp[row][col]=grid[row][col]+min(dp[row-1][col],dp[row][col-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];
    }
};
相关推荐
cici158742 分钟前
图像匹配算法:灰度相关法、相位相关法与金字塔+相位相关法
算法
杰克尼3 分钟前
七天速刷面试--day03
面试·职场和发展
佚名ano4 分钟前
支持向量机SVM的简单推导过程
算法·机器学习·支持向量机
云泽8086 分钟前
蓝桥杯算法精讲:倍增思想与离散化深度剖析
算法·职场和发展·蓝桥杯
m0_569881477 分钟前
基于C++的数据库连接池
开发语言·c++·算法
.select.14 分钟前
c++ auto
开发语言·c++·算法
2401_8845632417 分钟前
C++中的访问者模式高级应用
开发语言·c++·算法
清风徐来QCQ21 分钟前
全栈开发面试1
面试·职场和发展
智者知已应修善业22 分钟前
【51单片机用两个定时计数器级联实现定时】2023-04-12
c语言·经验分享·笔记·算法·51单片机
君义_noip23 分钟前
信息学奥赛一本通 1613:打印文章
c++·算法·信息学奥赛·csp-s