Leetcode刷题之路-动态规划相关
目录
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];//最后返回右下角的元素就是答案
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· ASP.NET Core - 日志记录系统(二)
· C#实现 Winform 程序在系统托盘显示图标 & 开机自启动
· 实现windows下简单的自动化窗口管理