p100 最小路径和(leetcode 64)

一:解题思路

这是一道经典的动态规划的题目。Time:O(m*n),Space:O(n)

二:完整代码示例 (C++版和Java版)

C++:

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

        return d[n-1];
    }
};

Java:

class Solution {
        public int minPathSum(int[][] grid) 
        {
               int m=grid.length,n=grid[0].length;
               int[] d=new int[n];
               d[0]=grid[0][0];
               for(int j=1;j<n;j++)
                   d[j]=d[j-1]+grid[0][j];
               for(int i=1;i<m;i++)
               {
                   d[0]+=grid[i][0];
                   for(int j=1;j<n;j++)
                       d[j]=Math.min(d[j],d[j-1])+grid[i][j];
               }
               
               return d[n-1];
        }
    }

猜你喜欢

转载自www.cnblogs.com/repinkply/p/12655666.html