Leetcode 64. 最小路径和(C++)

题目描述:

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。

解题思路:

可以看到这个题是一个经典的动态规划问题,那么在解一个动态规划的时候我们要确定:

1.确定原问题与子问题:

原问题是走到某位置的最短路径,子问题是从上面下来,还是从左面下来。

3,确认边界状态的值

   dp[0][0]=grid[0][0];
        for(i=1;i

4,状态转移方程:

dp[i][j]=min(dp[i][j-1]+grid[i][j],dp[i-1][j]+grid[i][j]);//    取从左面来和从右面来的步数最少的那个路径。

代码实现:

class Solution {
public:
    int minPathSum(vector>& grid) {
        int row=grid.size();
        int col=grid[0].size();
        int dp[row][col]={0};
        int i=0;
        int j=0;
        dp[0][0]=grid[0][0];
        for(i=1;i

运行结果:

Leetcode 64. 最小路径和(C++)_第1张图片


 

你可能感兴趣的:(leetcode刷题之动态规划)