【LeetCode】64. Minimum Path Sum

    xiaoxiao2021-03-25  98

    题目描述

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.

    Note: You can only move either down or right at any point in time.

    解题思路

    动态规划。 由于只能向左或者向下走,那么 当前的总和 = 现在所在位置的值 + 上面位置的总和 or 左边位置的总和 为了使总的和最小,那么,就有如下的状态转移方程

    dp[i][j] = grid[i][j] + min(dp[i -1][j], dp[i][j-1])

    注意:由于求的是整数的总和,所以可能会有溢出情况。

    AC代码

    class Solution { public: int minPathSum(vector<vector<int>>& grid) { int ans = 0; int m = grid.size(); if (m == 0) return ans; int n = grid[0].size(); if(n == 0) return ans; vector<vector<double>> dp; for (int i = 0; i <= m; ++i) { vector<double> temp(n + 1, INT_MAX); dp.push_back(temp); } for (int i = 1; i <= m; ++i) { for (int j = 1; j <= n; ++j) { if (i == 1 && j == 1) dp[i][j] = grid[i - 1][j - 1]; else dp[i][j] = grid[i - 1][j - 1] + min(dp[i][j - 1], dp[i - 1][j]); } } if (dp[m][n] >= INT_MAX) return INT_MAX; return dp[m][n]; } };
    转载请注明原文地址: https://ju.6miu.com/read-16395.html

    最新回复(0)