zoukankan      html  css  js  c++  java
  • leetcode64

    class Solution {
    public:
        int minPathSum(vector<vector<int>>& grid) {
            int row=grid.size();
            int col=grid[0].size();
            int N=1000;
            int D[N][N];
            D[0][0]=grid[0][0];
            for(int j=1;j<col;j++){
                D[0][j]=D[0][j-1]+grid[0][j];
            }
            for(int i=1;i<row;i++){
                D[i][0]=D[i-1][0]+grid[i][0];
            }
            for(int i=1;i<row;i++){
                for(int j=1;j<col;j++){
                    D[i][j]=min(D[i][j-1],D[i-1][j])+grid[i][j];
                }
            }
            return D[row-1][col-1];
        }
    };

     补充一个python版本:

     1 class Solution:
     2     def minPathSum(self, grid: 'List[List[int]]') -> 'int':
     3         m = len(grid)
     4         n = len(grid[0])
     5         dp =[[0 for col in range(n)] for row in range(m)]
     6         dp[0][0] = grid[0][0]
     7         for i in range(1,m):
     8             dp[i][0] =  dp[i-1][0] + grid[i][0]
     9 
    10         for j in range(1,n):
    11             dp[0][j] = dp[0][j-1] + grid[0][j]
    12         
    13         for i in range(1,m):
    14             for j in range(1,n):
    15                 dp[i][j] = min(dp[i][j-1],dp[i-1][j]) + grid[i][j]
    16         return dp[m-1][n-1]

    dp是二维数组,每一个元素表示:从起点[0][0]开始,到当前单元格,最小的路径长度。

    由于只能向“右”和“下”移动,而且没有负的权值。

    因此,

    第一行只能按照从左到右顺序,才能获得最小。

    第一列,只能按照从上到下顺序,才能获得最小。

    而其他单元格,可能有两种策略:

    策略1:从上面过来;

    策略2:从左面过来。

    两种策略的选择依据是,“上面”与“左面”两者较小的,这个较小的值 + 当前元素值,即为dp值。

    最终返回dp[m-1][n-1],即是到右下角单元格,最小路径和。

  • 相关阅读:
    HTTP断点续传 规格严格
    Java Shutdown 规格严格
    linux 命令源码 规格严格
    JTable调整列宽 规格严格
    linux 多CPU 规格严格
    Hello can not find git path 规格严格
    Kill 规格严格
    拜拜牛人 规格严格
    Swing 规格严格
    Debugging hangs in JVM (on AIX but methodology applicable to other platforms) 规格严格
  • 原文地址:https://www.cnblogs.com/asenyang/p/9777939.html
Copyright © 2011-2022 走看看