码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Minimum Path Sum

时间:2015-06-03 00:39:59      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

Well, this problem is a traditional dynamic programming problem. Suppose the minimum path sum of arriving at point (i, j) is S[i][j], then we have the following state equation:

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

Well, some boundary conditions need to be handled. The boundary conditions happen only on the topmost row (S[i - 1][j] does not exist) and the leftmost column (S[i][j - 1] does not exist). Suppose grid is like [1, 1, 1, 1], then the minimum sum to arrive at each point is simply an accumulation of previous points and the result is [1, 2, 3, 4].

Now we have the following (unoptimized) code.

 1 int minPathSum(vector<vector<int>>& grid) {
 2     int m = grid.size();
 3     int n = grid[0].size();
 4     vector<vector<int> > sum(m, vector<int>(n, grid[0][0]));
 5     for (int i = 1; i < m; i++)
 6         sum[i][0] = sum[i - 1][0] + grid[i][0];
 7     for (int j = 1; j < n; j++)
 8         sum[0][j] = sum[0][j - 1] + grid[0][j];
 9     for (int i = 1; i < m; i++)
10         for (int j = 1; j < n; j++)
11             sum[i][j]  = min(sum[i - 1][j], sum[i][j - 1]) + grid[i][j];
12     return sum[m - 1][n - 1];
13 }

As can be seen, each time when we update sum[i][j], we only need sum[i - 1][j] (at the current column) and sum[i][j - 1] (at the previous column), thus we need not maintain the fullm*n matrix. Maintaining two columns is enough.

Taking this into consideration, we have the following code.

 1 int minPathSum(vector<vector<int>>& grid) {
 2     int m = grid.size();
 3     int n = grid[0].size();
 4     vector<int> pre(m, grid[0][0]);
 5     vector<int> cur(m, 0);
 6     for (int i = 1; i < m; i++)
 7         pre[i] = pre[i - 1] + grid[i][0];
 8     for (int j = 1; j < n; j++) {
 9         cur[0] = pre[0] + grid[0][j];
10         for (int i = 1; i < m; i++)
11             cur[i] = min(cur[i - 1], pre[i]) + grid[i][j];
12         pre = cur;
13     }
14     return pre[m - 1];
15 }

 

[LeetCode] Minimum Path Sum

标签:

原文地址:http://www.cnblogs.com/jcliBlogger/p/4548053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!