题目描述
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