zoukankan      html  css  js  c++  java
  • leetcode Minimum Path Sum

    题目:还是类似于之前两题,这里给定的m*n矩阵是每个数字都有值的。求的从头到尾的最小sum是多少。还是用动态规划求。初始化的时候是先计算第一行和第一列。假设给定的数据如下:

    那么初始化后为:

    那么再定位要处理的数字到i=1和j=1处,如表中的数字2处。这个时候更新是更加它加上它的左边或者上边的较小的值。更新一次后为:

    一次类推可以将所有的更新完,最后输出grid[m-1][n-1]就可以了。

    class Solution {
    public:
        int minPathSum(vector<vector<int> > &grid) 
        {
            //if (grid.size() == 0) return 0;
            int m = grid.size(), n = grid[0].size();
            int i =1, j = 1; 
            while(j<n) { grid[0][j]+=grid[0][j-1]; j++;}
            while(i<m) { grid[i][0]+=grid[i-1][0]; i++;}
            i = 1; j = 1;
            for (; i < m; ++i)
                for (j =1 ; j < n; ++j) // 记得j重新赋值1
                {
                    grid[i][j] += min(grid[i-1][j], grid[i][j-1]);
                }
            return grid[m-1][n-1];
        }
    };

     2015/03/25:

    class Solution {
    public:
        int minPathSum(vector<vector<int> > &grid) {
            if (grid.size() == 0) return 0 ;
            int m = grid.size(), n = grid[0].size();
            for (int i = 1; i < m; ++i)
                grid[i][0] += grid[i-1][0];
            for (int j = 1; j < n; ++j)
                grid[0][j] += grid[0][j-1];
            for (int i = 1; i < m; ++i)
                for (int j = 1; j < n; ++j){
                    grid[i][j] = min(grid[i-1][j], grid[i][j-1]) + grid[i][j];
                }
            return grid[m-1][n-1];
        }
    };

    python:

    class Solution:
        # @param grid, a list of lists of integers
        # @return an integer
        def minPathSum(self, grid):
            for i in range(1, len(grid)):
                grid[i][0] += grid[i-1][0]
            for i in range(1, len(grid[0])):
                grid[0][i] += grid[0][i-1]
            for i in range(1, len(grid)):
                for j in range(1, len(grid[0])):
                    grid[i][j] = min(grid[i-1][j], grid[i][j-1]) + grid[i][j]
            return grid[len(grid)-1][len(grid[0])-1]
  • 相关阅读:
    POJ3041Asteroids(最小点覆盖+有点小抽象)
    POJ 2240Arbitrage(Floyd)
    POJ1860Currency Exchange(Bellman + 正权回路)
    POJ3259Wormholes(判断是否存在负回路)
    TCL V7300A-3D升级教程
    “一生所爱“一首一听就很想落泪的歌曲
    一生所爱 怀念那段旧时光~
    文艺小青年
    又是一年中秋节
    luogu1080 国王游戏(贪心+高精度)
  • 原文地址:https://www.cnblogs.com/higerzhang/p/4084219.html
Copyright © 2011-2022 走看看