Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.

Note: You can only move either down or right at any point in time.

Example:

Input:
[
  [1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum. 思路

    这道题我们可以使用回溯法,动态规划。但是回溯法的时间复杂度太高。当m,n比较大时时间复杂度会比较高,会出现时间复杂度超时的情况。因此我直接使用动态规划来解决。 这里的动态方程为 dp[i][j] = min(dp[i-1][j], dp[i][j-1])+nums[i][j]。时间复杂度为O(m*n), 空间复杂度为O(n),
解决代码

 class Solution(object):
def minPathSum(self, nums):
"""
:type grid: List[List[int]] # 这一个我们采用的是申请一个辅助矩阵来解决问题,所以这个方法的空间复杂度为O(n*m)。
:rtype: int
"""
if not nums:
return 0
m , n = len(nums), len(nums[0])
dp = []
for i in range(m): # 申请辅助空间
dp.append([0]*n)
dp[0][0] = nums[0][0]
for i in range(1, m): # 初始第一列
dp[i][0] = dp[i-1][0] + nums[i][0]
for i in range(1,n): # 初始化第一行
dp[0][i] = dp[0][i-1] + nums[0][i] for i in range(1, m): # 从第二行第二个元素开始直到最后一个
for j in range(1, n):
dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + nums[i][j]
return dp[m-1][n-1]

  空间复杂度为O(n)的解法

 class Solution(object):
def minPathSum(self, nums):
"""
:type grid: List[List[int]]
:rtype: int
"""
if not nums:
return 0
m , n = len(nums), len(nums[0])
dp = [0]*n # 申请一个长度为n的辅助数组
dp[0] = nums[0][0]
for i in range(1, n): # 先对第一行进行初始化
dp[i] = dp[i-1] + nums[0][i] for i in range(1, m): # 然后从第二行开始
dp[0] += nums[i][0] # 每一行第一个元素只能从上面达到。
for j in range(1, n):
dp[j] = min(dp[j], dp[j-1]) + nums[i][j]

return dp[-1]

【LeetCode每天一题】Minimum Path Sum(最短路径和)的更多相关文章

  1. LeetCode之“动态规划”:Minimum Path Sum && Unique Paths && Unique Paths II

    之所以将这三道题放在一起,是因为这三道题非常类似. 1. Minimum Path Sum 题目链接 题目要求: Given a m x n grid filled with non-negative ...

  2. LeetCode(64) Minimum Path Sum

    题目 Total Accepted: 47928 Total Submissions: 148011 Difficulty: Medium Given a m x n grid filled with ...

  3. 动态规划小结 - 二维动态规划 - 时间复杂度 O(n*n)的棋盘型,题 [LeetCode] Minimum Path Sum,Unique Paths II,Edit Distance

    引言 二维动态规划中最常见的是棋盘型二维动态规划. 即 func(i, j) 往往只和 func(i-1, j-1), func(i-1, j) 以及 func(i, j-1) 有关 这种情况下,时间 ...

  4. [LeetCode] Unique Paths && Unique Paths II && Minimum Path Sum (动态规划之 Matrix DP )

    Unique Paths https://oj.leetcode.com/problems/unique-paths/ A robot is located at the top-left corne ...

  5. Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum)

    Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum) 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. ...

  6. 刷题64. Minimum Path Sum

    一.题目说明 题目64. Minimum Path Sum,给一个m*n矩阵,每个元素的值非负,计算从左上角到右下角的最小路径和.难度是Medium! 二.我的解答 乍一看,这个是计算最短路径的,迪杰 ...

  7. [Leetcode Week9]Minimum Path Sum

    Minimum Path Sum 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/minimum-path-sum/description/ Descr ...

  8. LeetCode 64. 最小路径和(Minimum Path Sum) 20

    64. 最小路径和 64. Minimum Path Sum 题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明: 每次只能向下或 ...

  9. 【leetcode】Minimum Path Sum

    Minimum Path Sum Given a m x n grid filled with non-negative numbers, find a path from top left to b ...

随机推荐

  1. Java集合图谱

    比较 是否有序 是否允许元素重复 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是(用二叉排序树) Map AbstractM ...

  2. JDK12----------java环境变量配置

    https://jingyan.baidu.com/article/e5c39bf511bb3939d6603370.html

  3. 【转】win10哪个版本最好用,推荐win10企业版LTSC

    https://msdn.itellyou.cn/ win10企业版LTSC又被称为win10企业版2019长期服务版本,这个版本小编认为是目前最好用的win10版本,在win10企业版2016长期服 ...

  4. CodeForces 528D Fuzzy Search 多项式 FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8782849.html 题目传送门 - CodeForces 528D 题意 给你两个串$A,B(|A|\geq| ...

  5. mysql性能监控软件pmm

    具体配置操作步骤:1.在vmware或者virtualbox上安装centos镜像,可以选择阿里巴巴的镜像,下载速度快 centos7 修改yum源为阿里源,某下网络下速度比较快 首先是到yum源设置 ...

  6. 虚拟机Oracle VM VirtualBox linux系统如何访问windows共享文件夹

    1. 在本机系统设置一个共享文件夹,用于与Ubuntu交互的区域空间.     2.右击状态栏上共享文件夹图标或菜单栏“设备-共享文件夹”,打开共享文件夹设置,如图示   3.点击共享文件夹设置框,右 ...

  7. 一次国际化记录以及平铺JSON数据

    ​ 写这个方法的原因是因为我们需要改版国际化,因为相同的项目有其他分支做过国际化,但是主版本没有进行过国际化,目前需要修改主版本的国际化,但是因为国际化的方式做了结构上的调整所以写了这个工具方法方便去 ...

  8. linux打包文件和压缩

    1.解压:tar -zxvf archive.tar , unzip file1.zip 2.压缩:tar -cvfz archive.tar.gz dir1 , zip file1.zip file ...

  9. css 颜色表示法

    css颜色值主要有三种表示方法: (1)颜色名表示,如:red红色,gold金色 (2)rgb表示,如:rgb(255,0,0)表示红色 (3)16进制数值表示,如:#ff0000表示红色,这种可以简 ...

  10. Cmake知识----编写CMakeLists.txt文件编译C/C++程序

    1.CMake编译原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多.CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt ...