leetcode-最小路径和
题目描述
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
输入输出
思路分析
遇到统计可行路径的数量问题,或者求最小路径,一般有两种方法,搜索和动态规划。
注: 搜索一般在数据规模比较小的时候使用。复杂度比较高,在本题中: 。故采用动态规划
动态规划
状态定义:dp[i][j]:从左上角->(i,j)的最短路径和
状态转移方程:
边界情况:左边界:i≠0,j=0,
边界情况:上边界:i=0,j≠0,
初始状态:dp[0][0] = grid[0][0]
代码实现:
class Solution: def minPathSum(self, grid: List[List[int]]) -> int: # if not grid or not grid[0]: # return 0 m,n = len(grid),len(grid[0]) dp = [[0]*n for _ in range(m)] # 起始节点 dp[0][0] = grid[0][0] # 动态规划填表 for i in range(m): for j in range(n): if i==j==0: continue # 上边界 elif i==0: dp[i][j] = dp[i][j-1]+grid[i][j] # 左边界 elif j==0: dp[i][j] = dp[i-1][j]+grid[i][j] else: # 状态转移方程 dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + grid[i][j] return dp[m-1][n-1]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?