题目描述

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

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

思路

设dp为大小为 m x n的矩阵,dp[i][j]代表直到走到(i,j)这个点的最小路径和
题目要求,只能向右或向下走,换句话说,当前单元格 (i,j) 只能从左方单元格 (i-1,j)(i−1,j) 或上方单元格 (i,j-1)走到,因此只需要考虑矩阵左边界和上边界。
那么, 走到当前单元格 (i,j)的最小路径和 == “从左方单元格 (i,j-1) 与 从上方单元格 (i-1,j) 走来的 两个最小路径和中较小的 ” + 当前单元格值 grid[i][j] 。具体分为以下 4 种情况:

  1. 当左边和上边都不是边界,即i≠0, j≠0, dp[i][j]=min(dp[i][j-1], dp[i-1][j])
  2. 当左边是边界, 也就是只能从上边走过来, dp[i][j]=dp[i-1][j]
  3. 当右边是边界,也就是只能从左边走过来, dp[i][j]=dp[i][j-1]
  4. 当左、上都是边界,即当i=j=0,也就是起点, dp[i][j]=grid[i][j]

空间优化:
其实我们完全不需要建立 dpdp 矩阵浪费额外空间,直接遍历 grid[i][j]修改即可。这是因为:grid[i][j] = min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j] ;原 grid矩阵元素中被覆盖为 dp 元素后(都处于当前遍历点的左上方),不会再被使用到。

代码实现(py3)

class Solution:def minPathSum(self, grid: [[int]]) -> int:for i in range(len(grid)):for j in range(len(grid[0])):if i == j == 0: continueelif i == 0:  grid[i][j] = grid[i][j - 1] + grid[i][j]elif j == 0:  grid[i][j] = grid[i - 1][j] + grid[i][j]else: grid[i][j] = min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j]return grid[-1][-1]

复杂度分析
1.时间复杂度 O(M×N) : 遍历整个 grid矩阵元素。
2.空间复杂度 O(1) : 直接修改原矩阵,不使用额外空间。

解答参考

作者:jyd
链接:https://leetcode-cn.com/problems/minimum-path-sum/solution/zui-xiao-lu-jing-he-dong-tai-gui-hua-gui-fan-liu-c/
来源:力扣(LeetCode)

LeetCode-64.最小路径和相关推荐

  1. leetcode 64. 最小路径和(递归 / 动态规划解法图解)(Java版)

    题目 leetcode 64. 最小路径和 提示: m == grid.length n == grid[i].length 1 <= m, n <= 200 0 <= grid[i ...

  2. leetcode - 64. 最小路径和

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

  3. LeetCode 64最小路径和65有效数字66加一

    原创公众号:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode打卡 52八皇后Ⅱ&53最大子序和& ...

  4. LeetCode 64. 最小路径和(DP)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示 ...

  5. Leetcode 64. 最小路径和 -- DP算法

    Time: 20190831 题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: ...

  6. leetcode 64. 最小路径和

    难度:中等 频次:54 题目:给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 解题思路:动态 ...

  7. 93. Leetcode 64. 最小路径和 (动态规划-路径规划)

    步骤一.确定状态: 1.确定原问题中变化的变量个数 2.考虑最后一步 右下角坐标设为(m-1,n-1) 那么前一步一定是在(m-2,n-1)或者(m-1,n-2) 步骤二.推断状态方程: f[i][j ...

  8. Leetcode 64 最小路径和 (每日一题 20210721)

    给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小.说明:每次只能向下或者向右移动一步.示例 1:输入:grid = [[1,3,1], ...

  9. LeetCode 64 最小路径和

    题目描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和 为最小.说明:每次只能向下或者向右移动一步. 题解 动态规划 代码 class ...

  10. LeetCode 64.最小路径和(动态规划)

    题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5 ...

最新文章

  1. static和global的区别
  2. C++日志系统log4cxx使用总结
  3. FLEX:使用setTimeout,setInterval ,实现sleep功能(转)
  4. android keyboard,Android 如何获取keyboard的高度
  5. 关于IIS的IUSER和IWAM帐户
  6. JAVA清稿word_java开发实现word在线编辑及流转
  7. JavaWeb使用cookie实现记住密码,密码加密
  8. 大数据开发工程师岗位职责
  9. 高通 QSD MSM APQ区别
  10. 将矩形图片绘制成圆形图片
  11. 单链表的逆置算法解析
  12. Qt主线程和工作线程更新界面问题
  13. 抖音java表白教程_抖音上的表白代码是什么 抖音表白代码怎么写
  14. Xilinx FPGA clk_wiz IP使用
  15. 计算机的医学应用,计算机技术在医学中的应用
  16. 【经典面试题】vue2与vue3的区别
  17. 超然改编《该死的温柔》-王嘉尔
  18. 不对工整型左右手节奏如何弹奏,如4对3,3对4。
  19. IP地址扫描程序/扫描工具
  20. ILI9341的使用之【一】TFT-LCD原理(转载)

热门文章

  1. html中视屏音量大小,调整视频音量 编辑视频怎么调节视频中的音量大小/批量调节视频音量...
  2. 华师2019春《计算机基础》在线作业,18秋华师《计算机基础》在线作业.doc
  3. flume的source测试赫赫有名
  4. Nginx+Keepalived+LVS集群实战
  5. SpringAOP实现报错Bean named ‘userServiceImpl‘ is expected to be of type ‘.....‘
  6. 開運算、閉運算(morphologyEx、MORPH_OPEN、MORPH_CLOSE)
  7. python数组取2的倍数列,3的倍数列
  8. xshell工具将服务器文件下载到本地
  9. 一文了解Amazon推荐系统20年变迁
  10. scrapy打包exe 成功详细教程