您的位置:首页 > 其它

leetcode | Minimum Path Sum

2015-07-25 21:18 260 查看
Minimum Path Sum : https://leetcode.com/problems/minimum-path-sum/

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.

解析:

本题是一个动态规划类型的题目,

求 grid[0][0] 到 grid[rows-1][cols-1]的最小路径和

设m[i][j]表示从grid[0][0]到grid[i][j]的最小路径和,那么

m[0][0] = grid[0][0];

m[0][j] = m[0][j-1] + grid[0][j];

m[i][0] = m[i-1][0] + grid[i][0];

m[i][j] = min(m[i-1][j], m[i][j-1]) + gird[i][j];

由上述条件等式,容易写出动态规划的程序:

class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int rows = grid.size();
int cols = grid[0].size();
int result = 0;
if (rows == 0 || cols == 0)
return 0;
int** m = new int*[rows];
for (int i = 0;i < rows; i++)
m[i] = new int[cols];
// 动态规划,从小问题迭代求解
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (i == 0 && j == 0) {
m[i][j] = grid[i][j];
} else if (i == 0) {
m[i][j] = m[i][j-1] + grid[i][j];
} else if (j == 0) {
m[i][j] = m[i-1][j] + grid[i][j];
} else {
m[i][j] = min(m[i-1][j], m[i][j-1]) + grid[i][j];
}
}
}
result = m[rows-1][cols-1];
for (int i = 0; i < rows; i++)
delete m[i];
delete m;
m = NULL;
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: