【刷题日记】64. 最小路径和

简介: 本次刷题日记的第 39 篇,力扣题为:64. 最小路径和 ,中等

【刷题日记】64. 最小路径和

本次刷题日记的第 39 篇,力扣题为:64. 最小路径和中等

一、题目描述:

image.png

又是一个最小路径和,还记得前面一次我们做的 120. 三角形最小路径和 吗,咱们这一次的思路是不是和上一次一样呢?

是否也可以按照题目要求,找到一些规律,来进行数学运算呢?可以来瞅瞅


二、这道题考察了什么思想?你的思路是什么?

仔细查看一下这个题给出我们的重点信息有哪些:

  • 题目中给出了咱们一个表格,每个表格上面会有对应的整数,数字没有规律
  • 我们需要从左上角走路到右下角,需要路径和是最小的,题目明确要求,我们只能向右或者向下走,是不能蛇形走位的哦

细心的我们可以发现,整个表格,如果是按照第一行往右走,那么影响因素只有左边这一个,同理,第一列的时候,一直往下走,那么影响因素只有上面一个

就比如说 例子中,3 这个格子,肯定是从 左上角的 1 这个格子走过来的,同理,右上角的这个格子,肯定也是 3 这个格子走过来的

image.png

那么除了第一行和第一列,其他的格子是不是也会那么纯粹呢?

例如 5 这个格子,可能是上面的 3 这个格子走下来的,也有可能是左边的 1 这个格子向右走过来的,那么到底是谁走过来的路径是最小的呢?

当然这就依赖于他们之前的路径和是否是最小的了,因为我们就可以这样来推演,如下:

image.png

我们创建一个和题目给出的表格一样的二维数组,主要是记录最小路径和

第一行,和第一列,还是刚才说的一样,按照既定的路径和方式进行偏移和计算,当我们计算到其他格子的时候,就需要考虑当前格子,从左边走过来,和从上面走下来,谁路径和最小,谁小,就按照谁的方向来

如上图,这样一来,稍微推演一下,我们的思路就清晰了吧,接下里就开始撸代码吧

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码,这里需要注意这么几个情况

  • 单独处理好第一行的数据
  • 单独处理好第一列的数据
  • 其他剩下的格子,考虑好他的上方和左方的数据,计算最小路径和
func minPathSum(grid [][]int) int {
    //  校验输入的 grid 是不是表格
    if len(grid) == 0 || len(grid[0]) == 0 {
        return 0
    }
    // 给 dp 分配好空间,与题目给出的 grid 表格保持同样的空间
    row,col := len(grid), len(grid[0])
    dp := make([][]int, row)
    for i := 0; i< row ; i++{
        dp[i] = make([]int,col)
    }
    dp[0][0] = grid[0][0]
    // 计算,第一行
    for j:=1; j<col; j++{
        dp[0][j] = dp[0][j-1] +grid[0][j]
    }
    // 计算 第一列
    for i:=1; i<row; i++{
        dp[i][0] = dp[i-1][0] + grid[i][0]
    }
    // 计算剩下的格子
    for i:=1; i<row; i++{
        for j:=1;j<col;j++{
            dp[i][j] = min(dp[i][j-1],dp[i-1][j]) + grid[i][j]
        }
    }
    return dp[row-1][col-1]
}
func min(a,b int)int{
    if a<b{
        return a
    }
    return b
}

按照编码逻辑,和咱们的思路是一毛一样的,我们这样做的原因之一是题目给出的规则,只能往右或者往下,所以当前格子,要么是通过往下走移动到的,或者是往右走移动到的

最终,咱们走到表格的右下角,及计算 ok,得到整个链路的最小路径

四、总结:

按照我们这种方式去实现和解决问题,那么时间复杂度对于此题就很明确了吧,相当于咱们就是遍历了给出表格,每个格子咱们都已经遍历到了,所以时间度是 O(nm),n 可以理解为行,m 可以理解为 列

同理空间复杂度也是 O(nm),因为咱们也同样开辟了和表格一样的二维数组,产生了空间消耗

原题地址:64. 最小路径和

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~



相关文章
|
JSON Kubernetes Go
iLogtail 社区开源之夏活动来了!
加入 iLogtail 社区,不只是参与一个活动,更是拥抱一个充满无限可能的未来!
431 78
|
消息中间件 存储
RabbitMQ-死信交换机和死信队列
死信队列和死信交换机是RabbitMQ提供的一个非常实用的功能,通过合理使用这一机制,可以大大增强系统的健壮性和可靠性。它们不仅能有效解决消息处理失败的情况,还能为系统的错误追踪、消息延迟处理等提供支持。在设计系统的消息体系时,合理规划和使用死信队列和死信交换机,将会为系统的稳定运行提供一个有力的
200 0
【Python的魅力】:利用Pygame实现游戏坦克大战——含完整源码
【Python的魅力】:利用Pygame实现游戏坦克大战——含完整源码
|
弹性计算 Linux 开发工具
学生白嫖阿里云服务器申请流程
2023年学生白嫖阿里云服务器申请流程,完成学生验证的阿里云新用户可以领取一台2核2G阿里云服务器ECS
17275 3
|
关系型数据库 MySQL 测试技术
|
存储 监控 安全
基于SaaS的教务系统平台设计构想
本篇是一篇自然科学论文,仅供参考。 大学挑战杯复赛没过,放博客纪念。
499 0
基于SaaS的教务系统平台设计构想
|
测试技术 API 开发工具
工银e生活开发脱坑日志(6)开户申请API接入申请表
工银e生活开发脱坑日志(6)开户申请API接入申请表
308 0
|
JavaScript API
【Vue3 第十九章】插槽 slot
【Vue3 第十九章】插槽 slot
328 0
|
弹性计算 Linux 开发工具
阿里云服务器学生有优惠活动吗?免费学生认证申请一台
阿里云服务器学生有优惠活动吗?学生验证通过后的阿里云新用户可以免费学生认证申请一台,如果你从未参与过阿里云高校学生免费领取ECS的活动,在通过学生身份认证及续费任务后,最多可领取1+6个月免费云服务器ECS资源
797 0
|
弹性计算 Linux 开发工具
学生如何领取阿里云服务器,阿里云服务器学生优惠教程
2023年学生如何领取阿里云服务器,阿里云服务器学生优惠教程,在通过学生身份认证及续费任务后,最多可领取1+6个月免费云服务器ECS资源
1114 0