leetcode hot100 64. 最小路径和 medium 递归优化


dfs(i, j) = 从 (0,0) 走到 (i,j) 的最小路径和

到 (i, j) 只能 :向下 or 向右

clike 复制代码
dfs(i, j) = min(
							dfs(i + 1, j),    // 向下
							dfs(i, j + 1)     // 向右
							) + grid[i][j]

时间复杂度:O(m × n)

空间复杂度:O(m × n)

clike 复制代码
class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:

        # 时间复杂度:O(m × n), 空间复杂度:O(m × n)
        m = len(grid)
        n = len(grid[0])

        @cache
        def dfs(i, j):  # 当前位置(i, j)

            # 到达终点右下角
            if i == m - 1 and j == n - 1:
                return grid[i][j]

            # 越界
            if i >= m or j >= n:
                return float('inf')

            # 向下 or 向右
            return grid[i][j] + min(
                dfs(i + 1, j),   # 向下
                dfs(i, j + 1)    # 向右
            )

        return dfs(0, 0)   # 当前位置(i, j)从(0,0)开始
相关推荐
shehuiyuelaiyuehao5 小时前
算法32,连续数组,前缀和+哈希表
算法·leetcode·职场和发展
Navigator_Z8 小时前
LeetCode //C - 1223. Dice Roll Simulation
c语言·算法·leetcode
Tisfy8 小时前
LeetCode 2058.找出临界点之间的最小和最大距离:遍历+遇到极值则更新(这种题谁空间复杂度不是O(1)啊)
linux·数据库·leetcode·链表·题解·模拟·遍历
小欣加油9 小时前
Leetcode2058 找出临界点之间的最小和最大距离
数据结构·c++·算法·leetcode·职场和发展
CoderYanger9 小时前
A.每日一题:3345. 最小可整除数位乘积 I
java·数据结构·程序人生·算法·leetcode·面试·学习方法
Yfhonier9 小时前
岛屿数量(DFS)
算法·深度优先
Yfhonier10 小时前
6440. 极大连通图个数(DFS)
数据结构·算法·深度优先
玖玥拾10 小时前
LeetCode 1 两数之和
算法·leetcode·职场和发展
旖旎夜光10 小时前
LeetCode 974:和可被 K 整除的子数组(前缀和) —— 题解
数据结构·c++·算法·leetcode·前缀和
alphaTao1 天前
LeetCode 每日一题 2026/8/24-2026/8/30
python·算法·leetcode