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],即是到右下角单元格,最小路径和。

  • 相关阅读:
    02 : python 基础语法,流程控制语句
    10 : mysql 主从复制
    docker Dockerfile 参数讲解
    docker service 创建swarm节点服务
    docker image 删除未使用的镜像
    docker config 创建配置文件
    docker wait 命令使用
    docker update 更新容器信息
    docker top 命令使用
    docker tag 修改镜像的标枪
  • 原文地址:https://www.cnblogs.com/asenyang/p/9777939.html
Copyright © 2011-2022 走看看