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];
    }
};
相关推荐
Wect3 小时前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP14 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
端平入洛21 小时前
delete又未完全delete
c++
颜酱1 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub1 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
NAGNIP2 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试