Leetcode 64. 最小路径和 c++

链接:
https://leetcode-cn.com/problems/minimum-path-sum/

主要思路:
1.这个题比较简单,因为题目要求了,只能向右或者向下走,逐行遍历计算最短路径就可以了。
2.第一行只能通过左侧的点计算最短路径,第一列只能通过上方的点计算最短路径。
3.其它的点要对比左侧和上方最短路径选择最小的计算。

class Solution {
public:
    int minPathSum(vector>& grid)
    {
        if (grid.size() == 0 || grid[0].size() == 0) {
            return 0;
        }
        size_t height = grid.size();
        size_t width = grid[0].size();
        vector> minPathGrid = grid;

        // 初始化第一行最短路径,第一行只能从左到右
        minPathGrid[0][0] = grid[0][0];
        for (size_t j = 1; j < width; j++) {
            minPathGrid[0][j] = minPathGrid[0][j - 1] + grid[0][j];
        }

        // 第二行之后,有可能从左算出来,有可能上算出来
        for (size_t i = 1; i < height; i++) {
            // 每行第0个元素只能从上方计算
            minPathGrid[i][0] = minPathGrid[i - 1][0] + grid[i][0];
            for (size_t j = 1; j < width; j++) {
                minPathGrid[i][j] = min(minPathGrid[i][j - 1], minPathGrid[i - 1][j]) + grid[i][j];
            }
        }

        return minPathGrid[height - 1][width - 1];
    }
};

你可能感兴趣的:(Leetcode 64. 最小路径和 c++)