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)开始
相关推荐
tachibana29 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
晚笙coding11 小时前
LeetCode 98:验证二叉搜索树 —— 从局部判断到全局范围约束的递归思想
算法·leetcode·职场和发展
兰令水12 小时前
hot100【acm版】【2026.7.21打卡-java版本】
java·开发语言·算法·leetcode·面试
退休倒计时13 小时前
【每日一题】LeetCode 131. 分割回文串 TypeScript
算法·leetcode·typescript
旖-旎1 天前
LeetCode 279:完全平方数(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
良木林1 天前
滑动窗口 - LeetCode hot 100
javascript·算法·leetcode·双指针·滑动窗口
晚笙coding1 天前
LeetCode 108:将有序数组转换为二叉搜索树 —— 从数组到平衡二叉树的递归构造
数据结构·算法·leetcode
hold?fish:palm1 天前
7 接雨水
开发语言·c++·leetcode
tkevinjd1 天前
力扣148-排序链表
算法·leetcode·链表
wabs6662 天前
关于图论【深度优先搜索的理论基础】
算法·深度优先·图论