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. Vue使用watch监听一个对象中的属性

    问题描述 Vue提供了一个watch方法可以让使用者去监听某些data内的数据变动,触发相应的方法,比如 queryData: { name: '', creator: '', selectedSta ...

  2. Android 杂谈---帧动画

    Android中的动画有 帧动画 属性动画 补间动画 大体思路 1.需要定义存放每一帧的xml文件,放在drawable文件夹下 设置图片路径和duration,以及shot属性,false---&g ...

  3. oracle 列行转换

    1.列转换  1:每个字母转成一行 SELECT SUBSTR(A.COLUMN1, LEV, 1) COLUMN1FROM (     SELECT 'AABDC' COLUMN1 FROM DUA ...

  4. ansible的Filter

    filter的格式:   value..| filter() 在python中就是类的实例化 filter(self,*args,**kwargs) self就是filter中管道符前的value. ...

  5. kth min_max容斥

    题解: 普通的$min-max$容斥是用来求最后出现元素的期望之类的 $kth min-max$容斥进一步解决倒数第k个出现的元素的期望 给出公式: $kthmax(S)=\sum\limits_{T ...

  6. 圆周率pi π 与 角度的对应关系

    圆周率pi π 与 角度的对应关系 π 180° π/2 90° π/4     45° π/6     30°

  7. selenium webdriver 如何添加cookie

    一. webdriver中常用的cookie方法 webdriver中提供了操作cookie的相关方法: get_cookies()                  获得cookie信息 add_c ...

  8. JS浅谈原始值与引用值操作

    值的操作分为三大类:复制,传递,比较 一:复制 原始值 let a = 10; let b = a; 注释:2018-7-30 17:33:49 1 原始类型的值都是存放在栈内存当中,所以他们的赋值操 ...

  9. Mocha+should+Karma自动化测试教程

    Mocha+should+Karma自动化测试教程 一.了解TDD与BDD 首先,为什么我们了解TDD与BDD的是什么意思? 在实际项目中,大部分都是采用BDD的形式进行开发,也就是行为驱动开发. T ...

  10. [Web]Restful风格的适用场景

    最近一直在兜兜转转Restful的相关内容,准备在原先的项目上构建restful的API. 实践过程很别扭,直到看到这篇文章[A Brief Introduction to REST], 我才终于断定 ...