【LeetCode每天一题】Minimum Path Sum(最短路径和)
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(最短路径和)的更多相关文章
- LeetCode之“动态规划”:Minimum Path Sum && Unique Paths && Unique Paths II
之所以将这三道题放在一起,是因为这三道题非常类似. 1. Minimum Path Sum 题目链接 题目要求: Given a m x n grid filled with non-negative ...
- LeetCode(64) Minimum Path Sum
题目 Total Accepted: 47928 Total Submissions: 148011 Difficulty: Medium Given a m x n grid filled with ...
- 动态规划小结 - 二维动态规划 - 时间复杂度 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) 有关 这种情况下,时间 ...
- [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 ...
- Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum)
Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum) 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. ...
- 刷题64. Minimum Path Sum
一.题目说明 题目64. Minimum Path Sum,给一个m*n矩阵,每个元素的值非负,计算从左上角到右下角的最小路径和.难度是Medium! 二.我的解答 乍一看,这个是计算最短路径的,迪杰 ...
- [Leetcode Week9]Minimum Path Sum
Minimum Path Sum 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/minimum-path-sum/description/ Descr ...
- LeetCode 64. 最小路径和(Minimum Path Sum) 20
64. 最小路径和 64. Minimum Path Sum 题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明: 每次只能向下或 ...
- 【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 ...
随机推荐
- vs2010编译error_code
C1083 : 现象: xxxxx.cpp clxx:fatal error C1083:无法打开源文件: “..\..\..\..\src\folder1\folder2\folder3\folde ...
- python---哈希算法实现
# coding = utf-8 class Array: def __init__(self, size=32, init=None): self._size = size self._items ...
- Linux中常用操作命令(转)
1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切 ...
- Mqtt使用教程,简介
1,简介 MQTT协议(Message Queuing Telemetry Transport),翻译过来就是遥信消息队列传输,是IBM公司于1999年提出的,现在最新版本是3.1.1.MQTT是一个 ...
- [wordpress]WordPress地址(URL)错误,修改解决方案
本人在修改Wordpress地址(URL)时,误操作使URL指向错误,后台无法进入. 解决方案 1.先利用Putty登陆到自己的服务器上(这里登陆方法我不再赘述): 2.登陆MySqL,并输入密码: ...
- B - Housewife Wind-树链剖分-树状数组
思路:边权转化到点权上,统一把每一条边的边权集中到深度较深的点上去. #include<stdio.h> #include<iostream> #include<cstr ...
- 监听F5刷新,添加路由前缀
为了解决ninx反向代理,添加路由,但最终react的route还是不认识,研究了半天做个记录: document.addEventListener("keydown",funct ...
- 洛谷P1379 八数码难题
传送门 1.先用dfs枚举9!的全排列,存到hash数组里(类似离散化),因为顺序枚举,就不需要排序了 2.朴素bfs,判重就用二分找hash:如果发现当前状态=要求状态,输出步数结束程序 上代码 # ...
- 文件上传(xls)
function UploadFile(){ var filewj =document.getElementById("filewj").files[0]; //input Id ...
- 更新node和npm到最新版本
卸载 1.首先卸载nodejs,打开控制面板,然后找到程序卸载: 2.找到npm目录和npmcache 目录,直接删掉(一般情况下会在C:\Users\Caffrey\AppData\Roaming\ ...