首页 > 其他 > 详细

Leetcode刷题之路-动态规划相关

时间:2020-09-07 16:54:58      阅读:50      评论:0      收藏:0      [点我收藏+]

64.最小路径和

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
  • [ 算是比较好理解的动态规划问题,所以放到最前面容易回看复习 ]
  • [ 因为路径有很多条,要每一条路径都遍历出来时间复杂度极高,因为存在很多重复走过的路 ]
  • [ 动态规划的核心观念应该是把要重复利用的东西先保存好,避免程序做重复无意义的工作 ]
  • [ 这题应该算比较简单而且能体现出动态规划的思想的 ]
int minPathSum(vector<vector<int>>& grid) {
        for(int i=0,leni=grid.size();i<leni;++i) 
            for(int j=0,lenj=grid[0].size();j<lenj;++j){ //开始把所有元素遍历一次,下面就是分情况了
                if(i==0&&j!=0) grid[i][j] += grid[i][j-1]; //如果遍历到矩阵阵顶的元素,那就只能往右走咯,所以后一个元素与前一个元素相加
                else if(i!=0&&j==0) grid[i][j] += grid[i-1][j];//如果遍历到矩阵最左的元素,那只能往下走咯,所以下面一个元素和上面一个元素相加
                else if(i!=0&&j!=0) grid[i][j] += grid[i-1][j] < grid[i][j-1] ? grid[i-1][j] : grid[i][j-1]; //不是最上面也不是最左边的元素,有可能从上面来也有可能从左边来,那就取两者之间的最小值
            }
        return grid[grid.size()-1][grid[0].size()-1];//最后返回右下角的元素就是答案
    }

Leetcode刷题之路-动态规划相关

原文:https://www.cnblogs.com/Joy2013Ru/p/13627234.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!