-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMinimum_Path_Sum.cpp
More file actions
57 lines (46 loc) · 1.46 KB
/
Minimum_Path_Sum.cpp
File metadata and controls
57 lines (46 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Source : https://oj.leetcode.com/problems/minimum-path-sum/
// Author : zheng yi xiong
// Date : 2015-02-05
/**********************************************************************************
*
* 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.
*
**********************************************************************************/
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int minPathSum(vector<vector<int> > &grid) {
if (grid.empty() || grid[0].empty())
{
return 0;
}
int row_sum = grid.size();
int col_sum = grid[0].size();
vector<vector<int> > min_path_grid = grid;
for (int row = 1; row < row_sum; ++row)
{
min_path_grid[row][0] = min_path_grid[row - 1][0] + grid[row][0];
}
for (int col = 1; col < col_sum; ++col)
{
min_path_grid[0][col] = min_path_grid[0][col - 1] + grid[0][col];
}
for (int row = 1; row < row_sum; ++row)
{
for (int col = 1; col < col_sum; ++col)
{
min_path_grid[row][col] = (min_path_grid[row - 1][col] < min_path_grid[row][col - 1]) ? min_path_grid[row - 1][col] : min_path_grid[row][col - 1];
min_path_grid[row][col] += grid[row][col];
}
}
return min_path_grid[row_sum - 1][col_sum - 1];
}
};
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}