Leetcode题解系列——64. Minimum Path Sum(c++版)

版权声明: https://blog.csdn.net/dickdick111/article/details/84892456

题目链接:64. Minimum Path Sum

题目大意:给出一个矩阵,现在想寻求一条从最左上元素到达最右下的最短路径,且只能向下走或者向右走两种途径。

一.算法设计

这也是一道典型的动态规划题目,我设计状态为sum[ i ][ j ] 表示为第i行第j列到达该点的最短长度。现在想求sum[row - 1][col -1]的值。

状态转移方程:

  • 向右走: sum[i][j] = sum[i-1][j] + grid[i][j]
  • 向下走:sum[i][j] = sum[i][j-1] + grid[i][j]
    最后sum[i][j]取上述两值的最小值即可,这样的算法复杂度为O(M*N)

注意点:

  1. 注意初始化第一个位置的距离,即sum[0][0]
  2. 注意判断是否越界
  3. 初始化temp的值,不然取最小值的时候会出现错误,变为0.

二.算法实现

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        int col = grid[0].size();
        int row = grid.size();
        int sum[row][col] = {0};
        sum[0][0] = grid[0][0];
        for(int i = 0; i < row; i ++){
            for(int j = 0; j < col; j++){
                if(i == 0 && j == 0) continue;
                int temp1 = 999,temp2 = 999;
                // right
                if(i-1 >= 0)
                    temp1 = sum[i-1][j] + grid[i][j];
                // bottom
                if(j-1 >= 0)
                    temp2 = sum[i][j-1] + grid[i][j];
                sum[i][j] = min (temp1,temp2);
            }
        }
        return sum[row-1][col-1];
    }
};

猜你喜欢

转载自blog.csdn.net/dickdick111/article/details/84892456